设置Show类型Segue后Navigation Controller仍以模态呈现问题求助
听起来这个问题确实有点诡异——明明选了Show类型的Segue,结果却变成模态弹出,而且你已经试过重建组件了。我来分享几个可能的排查方向:
确认起始VC确实在Navigation栈中
先检查你的Navigation Controller的Root View Controller是不是那个带切换按钮的VC。有时候可能不小心把其他VC设成了root,导致起始VC不在导航栈里,Segue的行为就会异常。在Storyboard里点击Navigation Controller,查看右侧Attributes Inspector里的Root View Controller是否指向正确的起始VC。仔细核对Segue的类型
虽然你说选了Show,但还是再确认一遍:选中Segue,看右侧Attributes Inspector里的"Segue Type"是不是Show,而不是"Present Modally"或者"Show Detail"(Show Detail是针对Split View的,在普通导航栈里会有不符合预期的表现)。有时候可能误点选错,或者Storyboard的显示bug导致看起来是Show实际不是。清理Xcode缓存
Xcode的缓存经常会搞出各种莫名其妙的问题,试试这些操作:- 按下
Cmd+Shift+K清理Build Folder - 关闭Xcode,删除Derived Data文件夹(可以在Xcode的Preferences -> Locations里找到Derived Data的路径,直接删除整个文件夹)
- 重启Xcode,重新构建运行
- 按下
检查VC的Presentation属性
选中你的起始VC,看右侧Attributes Inspector里的"Presentation"是不是默认的"Automatic",而不是"Full Screen"或者其他模态相关的选项。有时候这个全局设置会覆盖Segue的行为,导致Show Segue变成模态弹出。
如果以上都试过还是不行,建议你新建一个极简的测试项目:只添加Navigation Controller、两个VC,创建Show Segue,看看能不能正常工作。如果测试项目没问题,那说明原项目的Storyboard可能有隐藏的损坏,这种情况下可以考虑把相关组件复制到新的Storyboard里。
内容的提问来源于stack exchange,提问作者Fynnwind

