Вопрос:

React Native отключить смахивание StackNavigator в TabNavigator

reactjs react-native react-navigation

3278 просмотра

1 ответ

502 Репутация автора

У меня есть TabNavigator с экранами 1 и 2 и внутри экрана 1 У меня есть StackNavigator с экранами 1.1 и 1.2. Я включил смахивание и жесты. Из корня я могу провести вкладки между 1 и 2. Когда я нахожусь на экране 1 и я открываю экран 1.1, я все еще могу провести пальцем к экрану 2 и эту способность мне нужно как-то отключить, когда открыт экран 1.1.

Мне нужно, чтобы он работал так же, как приложение для Instagram (IOS). Когда вы находитесь на главном экране (1), вы можете провести пальцем влево, чтобы увидеть прямой экран (2). Когда вы открываете профиль друзей на главном экране (1), он открывается как экран (1.1), и вы не можете провести пальцем влево, чтобы открыть прямой экран (2). Вы можете только вернуться.

У меня эта функциональность работает нормально, но с этой «ошибкой», когда я могу перемещаться с экрана 1.1 на экран 2.

Я много пытался решить эту проблему по-разному, читая документы и другие проблемы с навигацией, но как-то не получилось так, как мне нужно. Я полагаю, что-то не так с моей структурой вложенного экрана или что-то другое, или это решается по-другому.

У кого-то есть подсказка?

Автор: Mr. Sensitive Источник Размещён: 05.01.2018 01:40

Ответы (1)


7 плюса

5346 Репутация автора

Решение

Каждый экран на вкладке может иметь swipeEnabledиндивидуальную настройку навигации .

Взгляните на документацию по параметрам навигации по экрану навигатора вкладок .

MyScreen.navigationOptions = ({navigation}) => ({
  swipeEnabled: false
});

Вы можете установить это значение как результат функции, которая проверяет, был ли навигатор стека перемещен в или нет.

Обновление - реакция-навигация 3

Это свойство было удалено и заменено на gesturesEnabled.
Вы можете установить значение для каждого экрана отдельно или установить значение по умолчанию на уровне конфигурации навигатора.

const navigator = createStackNavigator(
  {
    Main: { screen: Main },
    ...
  },
  {
    defaultNavigationOptions: {
      gesturesEnabled: false,
    },
    ...
  }
);
Автор: Kraylog Размещён: 05.01.2018 01:52
Вопросы из категории :
32x32