从第二个ViewController通过Segue返回后,第一个VC导航栏出现异常左侧项
导航栏返回后异常显示问题的修复方案
问题根源
你通过普通Segue从第二个VC跳回第一个VC时,会在导航栈中新增一个第一个VC的实例,而非回到原本的实例,这就导致导航栏堆叠了之前的VC信息,出现重复标题和多余返回项的异常。
解决方案
方案1:直接调用导航控制器返回方法(推荐)
删除第二个VC中返回第一个VC的普通Segue,给Save按钮添加点击事件,调用导航栈的返回方法,直接回到原第一个VC实例:
// Swift 示例代码 @IBAction func saveButtonTapped(_ sender: UIButton) { // 先执行你的保存逻辑 navigationController?.popViewController(animated: true) }
// Objective-C 示例代码 - (IBAction)saveButtonTapped:(UIButton *)sender { // 执行保存逻辑 [self.navigationController popViewControllerAnimated:YES]; }
方案2:使用Unwind Segue(适合需要传递数据的场景)
如果需要从第二个VC向第一个VC传递数据,可使用专门的Unwind Segue:
- 在第一个VC中添加Unwind处理方法:
@IBAction func unwindToFirstVC(segue: UIStoryboardSegue) { // 这里可处理返回后的逻辑,比如刷新数据、接收第二个VC传递的参数 if let secondVC = segue.source as? SecondViewController { // 读取第二个VC的数据 } } - 在Storyboard中,选中第二个VC的Save按钮,按住Ctrl拖动到该VC顶部的Exit图标,选择刚创建的
unwindToFirstVC方法,完成Unwind Segue的创建。
额外检查
确保第一个VC的导航栏配置正确,在viewDidLoad中明确设置标题和加号按钮:
override func viewDidLoad() { super.viewDidLoad() title = "你的第一个VC标题" // 添加右侧加号按钮 let addBtn = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addAction)) navigationItem.rightBarButtonItem = addBtn }
内容的提问来源于stack exchange,提问作者Peterson
相关产品推荐
相关产品推荐

