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

iOS开发:Push导航控制器时去除返回按钮上的原控制器标题

解决导航栏返回按钮显示上一个VC标题的问题

我懂你的需求:push到VC B后,希望它的导航栏能显示自己的专属标题,同时左侧返回按钮要么只保留箭头,要么显示你想要的内容,而不是默认带出VC A的标题。这是iOS导航栏的默认逻辑导致的,咱们一步步来解决:

方法一:隐藏返回按钮文字(仅保留箭头)

这是最省心的方案,只需要在VC A的viewDidLoad里,把它的backBarButtonItem设置成空标题即可:

override func viewDidLoad() {
    super.viewDidLoad()
    title = "View Controller A Title"
    // 设置空标题的返回按钮,push到下一页后就只会显示箭头
    navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}

然后在VC B的viewDidLoad里设置自己的标题:

override func viewDidLoad() {
    super.viewDidLoad()
    title = "View Controller B Title"
}

这样操作后,VC B的导航栏会显示正确标题,左侧返回按钮只有箭头,不会再出现VC A的标题。

方法二:自定义返回按钮的文字

如果你希望返回按钮显示自定义文字(比如“返回”),同样在VC A里修改backBarButtonItem的标题就行:

navigationItem.backBarButtonItem = UIBarButtonItem(title: "返回", style: .plain, target: nil, action: nil)

VC B的标题设置和方法一保持一致即可。

方法三:在VC B里完全自定义返回按钮

要是不想改动VC A的代码,想直接在VC B里掌控返回按钮,可以替换它的leftBarButtonItem:

override func viewDidLoad() {
    super.viewDidLoad()
    title = "View Controller B Title"
    
    // 创建自定义返回按钮(这里用系统箭头图标,你也可以换成自定义图片)
    let backButton = UIBarButtonItem(image: UIImage(systemName: "arrow.left"), 
                                     style: .plain, 
                                     target: self, 
                                     action: #selector(navigateBack))
    navigationItem.leftBarButtonItem = backButton
}

// 实现返回上一页的逻辑
@objc private func navigateBack() {
    navigationController?.popViewController(animated: true)
}

这种方式能完全自定义返回按钮的样式(图标、文字都可改),完全不受VC A的设置影响。

补充说明:为什么默认会显示VC A的标题?

这里得提下iOS导航栏的逻辑:当前页面的返回按钮,实际上是由前一个页面的backBarButtonItem决定的,不是当前页面自己的设置。如果前一个页面没设置backBarButtonItem,系统就会自动用它的title作为返回按钮的文字,这就是你遇到的现象啦。

内容的提问来源于stack exchange,提问作者Logan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:20:34