Xcode 15中Show segue在真机上模态呈现ViewController问题求助
解决Push跳转意外变成模态呈现的问题
最常见的核心原因
Push跳转必须在UINavigationController的导航栈内才能正常工作,要是当前触发跳转的ViewController没在导航栈里,系统会自动 fallback 成模态呈现,这是绝大多数这类问题的根源。
一步步排查解决
确认当前控制器是否在导航栈:
可以在按钮点击事件里加一行代码验证:print(self.navigationController)要是输出
nil,就说明当前控制器不在导航栈里,这就是问题所在。Storyboard层级修正:
- 打开Storyboard,找到项目的初始控制器(带灰色箭头标记的那个),确保它是
UINavigationController,而不是普通的ViewController。 - 如果初始控制器是普通VC,选中它,点击Xcode顶部菜单栏的
Editor > Embed In > Navigation Controller,把它包裹到导航控制器中。
- 打开Storyboard,找到项目的初始控制器(带灰色箭头标记的那个),确保它是
Segue配置检查:
要是用Storyboard Segue实现跳转,选中对应的Segue线,在右侧Attributes Inspector面板里,确认Segue的Type是Show(e.g. Push),别选成Present Modally。代码跳转的正确性:
如果是用代码手动跳转,确保调用的是导航控制器的push方法,而不是present方法:// 正确写法 let loginVC = LoginViewController(nibName: nil, bundle: nil) self.navigationController?.pushViewController(loginVC, animated: true) // 错误写法(会模态呈现) // self.present(loginVC, animated: true)
额外排查点
要是以上都没问题,检查项目里有没有重写UINavigationController的相关方法,或者第三方路由类、UI框架干扰了跳转逻辑,可以临时移除第三方库测试,看是否恢复正常。
内容的提问来源于stack exchange,提问作者Sheehan Munim
相关产品推荐
相关产品推荐

