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

如何修改特定导航控制器的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:06:02