如何使用 createBottomTabNavigator 为 React Navigation 过渡设置动画?

Posted

技术标签:

【中文标题】如何使用 createBottomTabNavigator 为 React Navigation 过渡设置动画?【英文标题】:How do I animate React Navigation transitions using createBottomTabNavigator? 【发布时间】:2021-11-12 13:26:47 【问题描述】:

我花了最后一天试图找出如何使用 react-navigation 实现简单的淡入淡出屏幕转换,但我找不到一种方法让它与底部选项卡导航器一起使用。有人可以帮我吗?我已经广泛阅读了文档,但动画似乎只能通过堆栈导航器获得。

你能在这个小吃演示中进行过渡吗?

https://snack.expo.io/?platform=android&name=Native%20Stack%20Navigator%20%7C%20React%20Navigation&dependencies=%40expo%2Fvector-icons%40*%2C%40react-native-community%2Fmasked-view%40*%2Creact-native-gesture-handler%40*%2Creact-native-pager-view%40*%2Creact-native-paper%40%5E4.7.2%2Creact-native-reanimated%40*%2Creact-native-safe-area-context%40*%2Creact-native-screens%40*%2Creact-native-tab-view%40%5E3.0.0%2C%40react-navigation%2Fbottom-tabs%406.0.4%2C%40react-navigation%2Fdrawer%406.1.3%2C%40react-navigation%2Felements%401.0.4%2C%40react-navigation%2Fmaterial-bottom-tabs%406.0.4%2C%40react-navigation%2Fmaterial-top-tabs%406.0.2%2C%40react-navigation%2Fnative-stack%406.0.5%2C%40react-navigation%2Fnative%406.0.2%2C%40react-navigation%2Fstack%406.0.6&hideQueryParams=true&sourceUrl=https%3A%2F%2Freactnavigation.org%2Fexamples%2F6.x%2Ftab-based-navigation-minimal.js

【问题讨论】:

如果我的回答有帮助,请分享您的反馈。 原来如此,谢谢。我只是还没有足够的声望来投票。 【参考方案1】:

只需创建一个Animated.View 并将其附加到您的屏幕上。

const FadeHomeScreen = (props) => (
  <FadeInView>
    <HomeScreen ...props />
  </FadeInView>
);

然后将其用于Tab.Screen

<Tab.Screen name="Home" component=FadeHomeScreen />

只需在screenOptions 中添加unmountOnBlur: true

const screenOptions = 
    unmountOnBlur: true,
    headerShown: false,
;

<Tab.Navigator ... screenOptions >

代码: https://snack.expo.dev/@fanish/native-stack-navigator-%7C-react-navigation

您也可以使用react-native-reanimated 创建&lt;FadeInView /&gt; 组件

【讨论】:

非常感谢。但是,有没有办法在褪色页面上保持状态?启用 unmountOnBlur 会导致用户丢失所有导航历史记录。有没有一种方法可以实现相同的行为但保留所有状态逻辑? 是的,有一种方法可以做到这一点,但您必须使用focus 事件监听器。 Triggering an action with a 'focus' event listener 并致电FadeAnimation 使用 useFocusEffect hook snack.expo.dev/@pedrosousa/fade-animation-between-bottom-tabs 使其工作。现在下一步实际上是实现一个淡入淡出动画,它在屏幕内容之间而不是在 rootviewbackground(在本例中为空白屏幕)之间转换 添加这个属性&lt;Tab.Navigator ... screenOptions,sceneContainerStyle &gt;const sceneContainerStyle= backgroundColor:'#95a5a6' 你不会看到白屏。

以上是关于如何使用 createBottomTabNavigator 为 React Navigation 过渡设置动画?的主要内容,如果未能解决你的问题,请参考以下文章

如何在React Native中使用CreateBottomTabNavigator?

结合 createStackNavigator 和 createBottomTabNavigator?

createBottomTabNavigator 无法将选项卡从路线 3 更改为路线 2

createBottomTabNavigator 已移至错误消息

在 react-native 中隐藏和显示带有动画的 createBottomTabNavigator 选项卡栏

React Native 之 createBottomTabNavigator,createMaterialTopTabNavigator