Навигатор вложенных стеков реагирующей навигации не виден, если обернут в View или ScrollView - PullRequest
0 голосов
/ 12 марта 2019

Я работаю над сложным приложением React Native, которое использует библиотеку реагирования-навигации.Архитектура навигации выглядит примерно так:

  • Переключение навигатора
    • Стек аутентификации (вход, регистрация, забытый пароль и т. Д.)
    • Стек с проверкой подлинности
    • bottomTabNavigator
      • 3 страницы, одна из которых является другим навигатором коммутатора (который здесь находится в фокусе)
        • В этом навигаторе коммутатора (назовите его Report) есть несколько маршрутов, один из которых является новымНавигатор стека (назовите его Rulings)

Переключатель «Отчет» заключен в контейнер, в котором все экраны для этогоlevel have.

Вот небольшой пример кода того, как они написаны:

const AppNavigator = createSwitchNavigator({
  Authentication: createStackNavigator({
    Login,
    Register
    // etc
 }),
 Authenticated: createStackNavigator({
   Main: {
     screen: createBottomTabNavigator({
       tab1,
       tab2,
       Report: ReportContainer
    })
   // other screens outside of the tab navigator but still at the top level
})

const ReportNavigator = createSwitchNavigator({
  page1,
  page2,
  Rulings: createStackNavigator({
    RulingsHome: <Text>Rulings Home</Text>,
    // other screens
  })

const ReportContainer = ({ navigation }) => (
  <ScrollView>
    // other stylistic stuff
    <ReportNavigator navigation={navigation} />
  </ScrollView>
)

Извинения, если я допустил ошибки, это всего лишь пример.

Таким образом, навигатор отчетов отлично работает для всех остальных экранов.Содержимое упаковки вокруг <ReportNavigator> работает отлично, и содержимое работает.Однако для Rulings ничего из навигатора не отображается.Показана только основная обёртка от ReportContainer.Однако, когда я использую React devtools, я вижу, что содержимое отображается, но оно не видно.Кроме того, если я удаляю <ScrollView> в ReportContainer и просто использую <ReportNavigator navigation={navigation} />, он показывает содержание для Правил.

При переключении ScrollView for View возникает та же проблема, но если я переключаюсь на <React.Fragment>, он работает, упаковывая содержимое и все.Но, очевидно, поскольку это больше не ScrollView, содержимое не прокручивается.Мне нужно, чтобы содержимое и оболочку можно было прокручивать.

Если я добавлю некоторый код над компонентом Навигатора, например:

const ReportContainer = ({ navigation }) => (
  <ScrollView>
    // other stylistic stuff
    <Text>Hello, world!</Text>
    <ReportNavigator navigation={navigation} />
  </ScrollView>
)

Текст отображается, но ничего из навигатора не отображается.видимый.Глядя на инспектора, они оба являются потомками <ScrollView>, как и должно быть.

Таким образом, проблема в том, что <ScrollView><ReportSwitchNavigator /></ScrollView> (или <View>), похоже, испортил глубоко вложенный стековый навигатор внутриродительский переключатель навигатор.Что я могу сделать, чтобы обойти это?Это ожидаемое поведение, или я должен сделать пример на Закусках и подчиниться проблемам реагирующей навигации?

1 Ответ

0 голосов
/ 12 марта 2019

Я должен был установить contentContainerStyle={{ flex: 1 }} на <ScrollView>. Это делает содержимое прокручиваемым и отображает содержимое навигатора стека Rulings. Однако это портит стилизацию некоторых других компонентов, поэтому их нужно будет исправить. Спасибо @Andrew за то, что указал мне правильное направление!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...