Как реализовать собственный навигатор в React-Navigation? - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь реализовать пользовательский навигатор на основе TabRouter с React Navigation с настраиваемыми сложными анимациями и поведением, более или менее подобным способу перелистывания CoverFlow.

Существуют примеры того, как это сделать с помощью StackRouter, но ни один из них не работает при переходе на TabRouter.

До сих пор я понял, что для получения навигатора, такого как TabNavigator, мне понадобится такая функция:

(routeConfigs, config = {}) => (
    createNavigationContainer(
        createNavigator(TabRouter(routeConfigs, config))(MyNavigationView)
    )
);

с тем, как реализовать MyNavigationView, являясь моим основным запросом.

Документы чрезвычайно поверхностны для каждого компонента навигатора, большую часть времени сохраняя описание в одном предложении. Итак, что именно и какова роль:

  • маршрутизатор
  • навигационный вид
  • Переходный (я должен использовать один?)

Должен ли я (и как) визуализировать все сцены в моей функции _renderScene?

Как скрыть сцены, которые не отображаются в данный момент?

Я думаю, что я должен использовать PanResponder из MyNavigationView для обработки жеста смахивания. Должен ли я (и, если да, как) обновить состояние маршрутизатора при переходе пользователя к новой сцене?

Кроме того, я не хочу использовать AnimatedTabView из react-native-tab-view, который TabNavigator использует внутри, поскольку он не работает для меня на iOS (конфликт между ScrollView и PanResponder, который, вероятно, не будет исправлено на некоторое время )

Это много вопросов, но я немного растерялся. Я много смотрел на источники React Navigation, но они все еще оставляют меня в замешательстве.

Даже частичный ответ поможет.

1 Ответ

0 голосов
/ 15 августа 2018

Я думаю, что это может помочь: https://github.com/react-navigation/react-navigation/blob/master/examples/NavigationPlayground/js/CustomTabs.js

Так, может быть, вы можете обновить свою функцию следующим образом?

createNavigationContainer(
  createNavigator(MyNavigationView, TabRouter(routeConfigs, config), {})
)
...