You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:15:01