Xcode9.2/iOS10.x下重构Storyboard后导航项消失但功能正常
我之前也碰到过一模一样的情况——拆分大型Storyboard后,导航栏的标题和按钮突然就没了,结合你的场景,给你几个排查和解决的方向:
1. 确认Segue跳转类型是否正确
首先检查主Storyboard到新Storyboard的Segue类型,必须是Show(Push),绝对不能是Present Modally或者其他类型。只有Push操作会把新视图控制器加入现有导航栈,继承原导航控制器的上下文;如果用了Modal,新VC会脱离原导航栈,自然不会显示你之前配置的导航项。
检查方式:选中Storyboard里的Segue,在右侧Attributes Inspector的「Segue Type」下拉框里确认是Show。
2. 验证新Storyboard中VC的Navigation Item配置
虽然你说内容迁移正确,但有时候移动视图控制器时,Navigation Item的属性可能会悄悄丢失或未正确关联。打开新Storyboard,选中对应的员工管理VC:
- 查看右侧Attributes Inspector的「Navigation Item」区域,确认Title字段已正确填写;
- 切换到Object Library,检查VC的Navigation Item下是否还存在你之前设置的左右导航栏按钮,若缺失就重新添加配置。
3. 手动在代码中强制设置导航项(兜底方案)
如果Storyboard配置看起来完全没问题,但导航项还是不显示,可以在新VC的viewDidLoad方法里手动设置,确保导航项被正确加载:
Objective-C版本:
- (void)viewDidLoad { [super viewDidLoad]; // 设置标题 self.navigationItem.title = @"员工管理"; // 设置右侧导航按钮 UIBarButtonItem *rightBtn = [[UIBarButtonItem alloc] initWithTitle:@"添加" style:UIBarButtonItemStylePlain target:self action:@selector(addEmployee:)]; self.navigationItem.rightBarButtonItem = rightBtn; }
Swift版本:
override func viewDidLoad() { super.viewDidLoad() // 设置标题 navigationItem.title = "员工管理" // 设置右侧导航按钮 let rightBtn = UIBarButtonItem(title: "添加", style: .plain, target: self, action: #selector(addEmployee)) navigationItem.rightBarButtonItem = rightBtn }
4. 清理Xcode缓存并重启
有时候Xcode的缓存会导致界面元素加载异常,试试这些操作:
- 按下
Cmd+Shift+Option+K清理Build Folder; - 按下
Cmd+Shift+K清理Build; - 完全退出Xcode,重新打开项目并运行。
5. 检查Storyboard Reference的目标设置
如果你是用Storyboard Reference指向整个新Storyboard,要确保新Storyboard的初始视图控制器就是你要跳转的员工管理VC;如果是通过Storyboard ID指定目标VC,要确认目标VC的Storyboard ID已正确设置,且Storyboard Reference的「Referenced ID」字段填写的是这个ID。
按上面的步骤排查,应该就能解决导航项消失的问题了。
内容的提问来源于stack exchange,提问作者Konstantinos

