iOS Swipe Back手势未执行navigation.goBack() 导航跳转异常求助
根因
你当前的侧滑返回触发了最外层rootStack的默认pop行为:iOS端Stack导航默认开启左边缘侧滑pop上一级路由的逻辑,你的DrawerNavigator和AuthNavigator同属rootStack的平级路由,侧滑时会直接把DrawerNavigator从根栈中移除,自然就跳回了登录页,和内部子导航的goBack逻辑完全无关。
你之前用beforeRemove监听会闪屏,是因为该事件在路由即将被移除时才触发,此时侧滑动画已经执行到一半,已经能看到底层的登录页,再执行自定义跳转逻辑就会出现闪跳。
解决方案
方案1(推荐,改一行配置即可)
给根栈中DrawerNavigator的路由单独禁用侧滑手势,让内部子Stack导航接管侧滑返回逻辑:
<rootStack.Navigator initialRouteName="AuthNavigator" screenOptions={{ headerShown: false }}> <rootStack.Screen name="AuthNavigator" component={createAuthNavigator} /> <rootStack.Screen name="DrawerNavigator" component={drawerNavigator} // 新增这行配置,禁用当前路由的根栈侧滑手势 options={{ gestureEnabled: false }} /> </rootStack.Navigator>
该配置不会影响内部子Stack导航的侧滑返回功能,也不会影响抽屉导航本身的滑出手势,完全符合你的预期。
方案2(辅助优化)
用户登录成功跳转主页面时,用replace替代navigate跳转DrawerNavigator:
// 登录成功后执行 navigation.replace('DrawerNavigator')
这个操作会把AuthNavigator从根栈中彻底移除,根栈内只会保留DrawerNavigator一个路由,即使不小心触发根栈侧滑也没有上一级路由可跳,进一步避免异常。
内容的提问来源于stack exchange,提问作者Alix Humbert
相关产品推荐
相关产品推荐

