Swift 3:从Blue页面Segue返回Green时Tab Bar消失的问题咨询
解决返回时Tab Bar消失的问题:正确Segue选择与原因解析
嘿,我来帮你搞定这个Tab Bar消失的麻烦!先给你拆解问题,再给你落地的解决方案。
为什么返回Green页面时Tab Bar不见了?
你现在用的Show Detail segue是专门给UISplitViewController(拆分视图控制器)设计的,它的作用是把目标视图控制器直接替换掉当前的详情容器或者整个导航栈的根控制器——简单说就是它会让Blue页面占满整个屏幕,把原来包含Tab Bar的控制器层级给覆盖了,所以返回的时候Tab Bar自然就没了,完全不符合你要保留Tab Bar切换Red/Green的需求。
你应该用哪种Segue?
根据你的需求(按钮切换Green/Blue,同时保留Tab Bar的Red/Green切换功能),推荐两种最适配的方案,优先选第一种:
1. Show Segue(也就是旧版的Push Segue)
这是最符合iOS导航逻辑的选择,前提是你的Green页面已经被包裹在UINavigationController里(这是Tab Bar控制器的标准配置:Tab Bar的每个子项都应该是一个导航控制器,再嵌套对应的页面)。
- 操作起来很简单:在Storyboard里,从Green页面的按钮拖到Blue页面,选择
Show选项就行。 - 效果:Blue页面会被压入Green所在的导航栈,返回时(不管是用导航栏自带的返回按钮,还是代码里调用
navigationController?.popViewController(animated: true)),Tab Bar会一直稳稳地留在底部——因为整个导航控制器还是Tab Bar控制器的子项,根本不会被覆盖。
2. Present Modally Segue(备选方案)
如果你想让Blue页面以模态弹出的方式展示,那记得给Blue页面套一个UINavigationController,然后设置弹出样式(比如选Page Sheet,别用Full Screen),再在Blue的导航栏加个返回按钮,点击时调用dismiss(animated: true)回到Green。这种方式下,弹出Blue时Tab Bar会暂时隐藏,但返回Green后会重新显示,也能满足需求。不过还是更推荐第一种,因为它的用户体验更贴合iOS的常规导航逻辑。
额外要注意的小细节
- 一定要确认你的Tab Bar控制器的子控制器是
UINavigationController,而不是直接放Green页面。只有这样,Green和Blue才属于同一个导航栈,Tab Bar才会一直存在。 - 赶紧把之前的
Show Detailsegue删掉,避免和新的segue产生层级冲突。
内容的提问来源于stack exchange,提问作者Justin Shaw
相关产品推荐
相关产品推荐

