本机反应-更改导航方向(即,从右到左)

kir*_*imi 3 navigation react-native react-navigation

我正在使用反应导航从一个屏幕导航到另一个屏幕。顺便说一下,我正在使用createStackNavigator

我正在使用下面的代码在屏幕之间导航。

<Button onPress={()=>this.props.navigation.navigate('ScreenTwo')}>button-></Button>
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我想更改动画方向。目前,当我按下按钮时,会ScreenTwo弹出,而我希望屏幕从右向左滑动。

我可以在导航时更改动画方向吗?

Kah*_*Tim 8

satya164在 react-navigation/stack github repo 中回答,使用gestureDirection: 'horizontal-inverted'indefaultNavigationOptions/navigationOptions

Screen: {
  screen: Screen,
  navigationOptions: {
    ...TransitionPresets.SlideFromRightIOS,
    gestureDirection: 'horizontal-inverted',
  },
},
Run Code Online (Sandbox Code Playgroud)

相关链接如下:

https://github.com/react-navigation/stack/issues/377#issuecomment-578504696

https://reactnavigation.org/docs/stack-navigator/#animation-related-options


Din*_*ura 7

您需要在导航配置旁边使用“自定义屏幕过渡”。尝试下面的代码,(确保从“ react-native”导入Easing,Animated)

const yourStack = createStackNavigator(
  {
    One: ScreenOne,
    Two: DetailsTwo,
  },
  {
    initialRouteName: 'One',
    transitionConfig: () => ({
      transitionSpec: {
        duration: 300,
        easing: Easing.out(Easing.poly(4)),
        timing: Animated.timing,
      },
      screenInterpolator: sceneProps => {
                const {layout, position, scene} = sceneProps;
                const {index} = scene;

                const width = layout.initWidth;
                const translateX = position.interpolate({
                    inputRange: [index - 1, index, index + 1],
                    outputRange: [width, 0, 0],
                });

                const opacity = position.interpolate({
                    inputRange: [index - 1, index - 0.99, index],
                    outputRange: [0, 1, 1],
                });

                return {opacity, transform: [{translateX: translateX}]};
            },
    })
  }
);
Run Code Online (Sandbox Code Playgroud)

  • 真的没有简单的方法来设置“从左/右滑动”吗?如果我需要相同的导航在不同的地方使用不同方向的动画怎么办?真的讨厌反应本机导航..它太可怕了 - 抱歉...需要把它拿出来..我猜你的答案是考虑到所有事情的最好的答案 - 谢谢 (3认同)