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
相关产品推荐
相关产品推荐

