Не работает отключение сокрытия объектов, навигационный ящик react native

#javascript #react-native #navigation-drawer #gesture

#javascript #react-native #навигация-ящик #жест

Вопрос:

Мы используем навигационный ящик в нашем приложении для отображения бокового меню. На нескольких экранах мы не хотим показывать этот навигационный ящик, как только пользователь попытался сделать жесты влево / вправо.

Итак, для этого мы пытаемся скрыть определенный экран — жесты / navigationdrawer — но это не работает. Когда пользователь проводит пальцем (влево / вправо), панель по-прежнему открывается.

 
    const AppNavigator = StackNavigator(
      {
        // Drawer: { screen: Drawer },
        Register: {
          screen: Register,
          navigationOptions: ({ navigation }) => ({
            drawerLockMode: "locked-closed",
          })
        },
        TabHome: { screen: TabHome },
        Album: { screen: Album },
        offlineContent: { screen: offlineContent },
        changePassword: { screen: changePassword },
        Player: {screen: Player},
      },
      {
        initialRouteName: "TabHome",
        // header: null
      }
    );
  

Мы пробовали оба drawerLockMode:"locked-closed" и disableOpenGesture: true
но ничего не работает.

Примечание: я использую "react-navigation": "^3.0.9" версию

Есть предложения отключить навигационный ящик, открываемый жестами?

Ответ №1:

можете ли вы попробовать этот код?

 const AppNavigator = StackNavigator(
      {
        // Drawer: { screen: Drawer },
        Register: {
          screen: Register
        },
        TabHome: { screen: TabHome },
        Album: { screen: Album },
        offlineContent: { screen: offlineContent },
        changePassword: { screen: changePassword },
        Player: {screen: Player},
      },
      {
        initialRouteName: "TabHome",
        // header: null
      }
    );
AppNavigator.navigationOptions = ({ navigation }) => {
  const navigationOptions = {};
  if (getCurrentRouteName(navigation.state) === 'Register') {
    navigationOptions.drawerLockMode = 'locked-closed';
  }
  return navigationOptions;
};
  

ИЛИ если ваша версия react-navigation — V2,

 const Stack = createStackNavigator({
    Register: Register,
},
    {
        drawerLockMode: 'locked-closed'
    }
);
  

Функция getCurrentRouteName

 getCurrentRouteName(navState) {

    if (navState.hasOwnProperty('index')) {
        this.getCurrentRouteName(navState.routes[navState.index])
    } else {
        console.log("Current Route Name:", navState.routeName)
        // can then save this to the state (I used redux)
        store.dispatch(setCurrentRouteName(navState.routeName))
    }

}
  

Комментарии:

1. Можете ли вы объяснить первый метод и что он будет делать? Мы отключаем этот жест в stacknavigator.

2. Вы можете добавить AppNavigator.navigationOptions в соответствии с определенным кодом AppNavigator.

3. Вы имеете в виду, что я должен добавить все экраны, которые необходимо избегать жестов?

4. getCurrentRouteName становится неопределенным

5. В AppNavigator по-прежнему отображается значение getCurrentRouteName, не определенное.navigationOptions = ({ навигация }) => { метод