You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从第二个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:

  1. 在第一个VC中添加Unwind处理方法:
    @IBAction func unwindToFirstVC(segue: UIStoryboardSegue) {
        // 这里可处理返回后的逻辑,比如刷新数据、接收第二个VC传递的参数
        if let secondVC = segue.source as? SecondViewController {
            // 读取第二个VC的数据
        }
    }
    
  2. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 11:48:07