#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 = ({ навигация }) => { метод