反应导航抽屉rtl问题

时间:2018-11-26 23:12:10

标签: android react-native react-navigation right-to-left

我正在开发支持rtl的应用程序,并且我正在使用react-navigation库“ v.3.0.1”来处理导航

以下代码是我的代码的一部分,实际上可以重现该问题

index.js

import {AppRegistry,I18nManager} from 'react-native';
import App from './App';
import {name as appName} from './app.json';
I18nManager.allowRTL(true);
I18nManager.forceRTL(true);
AppRegistry.registerComponent(appName, () => App);

App.js

import React,{Component} from 'react';
import {header,Text,View,Dimensions,TouchableOpacity} from 'react-native';

import{createAppContainer,createDrawerNavigator,createStackNavigator,SafeAreaView} from 'react-navigation';
import RightDrawer from './src/rightdrawer';

const CategoryScreen = () => 
  {
    return(<View>
      <Text>CategoryScreen</Text>
    </View>);
  }

import { MenuProvider } from 'react-native-popup-menu';

const AppNavigator = createStackNavigator(
{
  CategoryScreen:
    {
      screen: CategoryScreen,
    }
},
{
  defaultNavigationOptions:
    {
      headerStyle:
        {
          backgroundColor: '#0f5599'
        },
      headerTintColor: 'white',
      headerBackTitleStyle:
        {
          color: 'white'
        }
    }
});
const DrawerNavigator = createDrawerNavigator(
    {
    Item1:
      {
          screen: AppNavigator,
      }
    },
    {
        contentComponent: RightDrawer,
        drawerLockMode: "unlocked",
        drawerPosition: 'right',
        drawerWidth: () => 
          {
            return Dimensions.get('window').width - 150
          },
        drawerType: 'slide',
        drawerBackgroundColor: '#333333',
        backBehavior: "none"
    });

const AppStackNavigator = createStackNavigator(
    {
      AppNav: DrawerNavigator
    });

const AppContainer = createAppContainer(AppStackNavigator);
class App extends Component
    {
      render()
          {
            return(
                    <SafeAreaView style={{flex: 1}}>
                        <AppContainer />
                    </SafeAreaView>);
          }
    };
export default App;

src / rightdrawer.js

import React,{Component} from 'react';
import {View,Text,ScrollView,TouchableOpacity} from 'react-native';
import {StackActions} from 'react-navigation';
import {DrawerActions} from 'react-navigation-drawer';

class RightDrawer extends Component
    {
        constructor(props)
            {
                super(props);
                this.state = 
                    {
                        categories:[]
                    }
            }
        componentDidMount()
            {
                this.getCategories(this);
            }
        navigateToScreen = (route,routeParams) =>
            {
                const navigateAction = StackActions.push({
                    routeName: route,
                    params: routeParams
                  });
                this.props.navigation.dispatch(navigateAction);
                this.props.navigation.dispatch(DrawerActions.closeDrawer());
            }
        getCategories(context)
            {
                context.setState({refreshing: false,categories: [{i:'c1',n:'name1'},{i:'c2',n:'name2'}]});
            }
        render()
            {
                if(this.state.categories.length === 0)
                    return (<View></View>);

                return(<View style={{backgroundColor: 'white',flex: 1}}>
                    <ScrollView style={{height: '100%',width:'100%',backgroundColor: '#333333'}}>
                        {this.state.categories.map((key,id) => 
                            {return(
                                <TouchableOpacity key={key.n} onPress={() => 
                                    {
                                        let nid = key.i;
                                        this.navigateToScreen('CategoryScreen',{id: nid,title: key.n});
                                    }}>
                                    <View style={{width: '100%',height: 60,justifyContent:'center'}}>
                                        <Text style={{color: 'white',height: 32.5,width: '100%',paddingRight: 20,fontSize: 20}}>{key.n}</Text>
                                    </View>
                                </TouchableOpacity>);
                            })}
                    </ScrollView>
                </View>);
            }
    }
export default RightDrawer;

使用上面的代码将实际生成此输出

enter image description here

从右侧滑动抽屉实际上会生成此输出

enter image description here

这是问题所在,因为您看到抽屉不完整并且被夹住了

希望我的代码很清楚,您可以重现该问题

0 个答案:

没有答案