如何修改特定导航控制器的Back Button Tint Color?
仅修改指定导航控制器返回按钮色调的实现方案
你原有代码失效的核心原因是:
navigationItem.backBarButtonItem对应的是当前页面作为上级页面、跳转至下级页面时,下级页面顶部显示的返回按钮,且该属性默认值为nil,直接设置不会作用于当前页面显示的返回按钮。
你可以根据实际需求选择以下两种方案,均不会影响项目内其他导航控制器的样式:
场景1:自定义导航控制器全局生效(作用于该导航控制器下所有页面)
直接创建UINavigationController的自定义子类,在其生命周期内设置导航栏tintColor即可,后续需要用到该特殊样式的导航控制器时,都用这个自定义子类实例化:
class CustomNavigationController: UINavigationController { override func viewDidLoad() { super.viewDidLoad() // 仅当前导航控制器的返回按钮会生效红色 self.navigationBar.tintColor = .red } }
场景2:仅修改某个导航控制器下的单个页面返回按钮色调
如果不需要整个导航栈都生效,只需要单个页面的返回按钮是特殊颜色,可以在该页面的生命周期方法里动态修改,离开页面时恢复原有样式,避免影响同导航栈的其他页面:
// 目标页面的视图控制器内实现 class TargetViewController: UIViewController { // 保存原有tintColor用于离开时恢复 private var originalTintColor: UIColor? override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) // 保存当前导航栏原有色调 originalTintColor = navigationController?.navigationBar.tintColor // 设置为你需要的红色 navigationController?.navigationBar.tintColor = .red } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) // 恢复原有色调 navigationController?.navigationBar.tintColor = originalTintColor } }
注意事项
- 如果你使用了自定义的返回按钮,直接给自定义按钮的
tintColor属性赋值即可,不需要修改导航栏全局tint - 不要直接修改全局
UINavigationBar.appearance()的属性,否则会作用于项目内所有导航控制器
内容的提问来源于stack exchange,提问作者Chamoy
相关产品推荐
相关产品推荐

