Реакционно-навигационный ящик RTL вопроса - PullRequest
0 голосов
/ 27 ноября 2018

Я работаю над приложением, которое поддерживает RTL, и я использую библиотеку реагирования-навигации "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

Вот проблема, поскольку вы видите, что ящик не полный и обрезан

Надеюсь, мой код ясен, и вы можете воспроизвести проблему

...