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

ViewController跳转至导航控制器后立即返回原控制器问题求助

解决导航控制器跳转后立刻弹回的问题

嘿,我来帮你排查这个跳转后新栈立刻弹回的问题!这种情况通常是 segue 配置或导航栈管理的细节出了问题,咱们一步步拆解解决:

先检查故事板的 segue 配置

  • 首先必须把跳转到新导航控制器的 segue 类型设为「Present Modally」(iOS 13+ 可选「Present Full Screen」)。如果用 push/show 类型,系统会把新导航的根VC推到当前导航栈里,而不是启动独立的新栈,这会直接导致逻辑冲突,触发自动弹回。
  • 检查新导航控制器的「Is Initial View Controller」选项有没有被误勾选!如果这个选项开启,系统启动时会自动加载它,和你的 segue 跳转逻辑冲突,导致栈被强制重置。选中新导航控制器,在右侧 Attributes Inspector 里把这个选项关掉。

排查 prepare(for:sender:) 代码

你提到重写了这个方法,要确保代码逻辑没有问题:

  • 不要直接操作 segue.destination 作为目标VC,因为这里的 destination 是新的导航控制器本身,正确的做法是先拿到导航控制器,再获取它的根VC来传值。示例代码如下:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "YourSegueIdentifier" {
        guard let navController = segue.destination as? UINavigationController,
              let targetVC = navController.viewControllers.first as? YourTargetViewController else {
            return
        }
        // 这里给目标VC传值,比如 targetVC.userData = currentUserData
    }
}
  • 检查方法里有没有不小心调用 popViewController、dismiss 这类会导致页面返回的代码,这会直接打断跳转流程。

其他隐藏排查点

  • 检查新导航控制器的根VC,看看它的 viewDidLoad、viewWillAppear 等生命周期方法里,有没有误写 dismiss(animated:completion:) 或 navigationController?.popViewController(animated:) 这类代码,这会导致页面一出现就立刻消失。
  • 排查AWS Cognito的相关回调逻辑,比如身份验证的失败处理、状态监听回调里,有没有触发返回初始VC的代码(比如 navigationController?.popToRootViewController(animated:)),这类全局回调很容易干扰页面跳转。

按照上面的步骤排查后,应该就能解决新栈立刻弹回的问题啦!

内容的提问来源于stack exchange,提问作者froggomad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:11:12