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

iOS 15 环境下如何动态修改导航栏颜色?

iOS 15 动态修改导航栏颜色无效应对方案

此前iOS 14及更低版本中,修改导航栏背景色的通用写法为:

self.navigationController?.navigationBar.barTintColor = MY_COLOR

该写法在iOS 15后不再生效,要实现导航栏已展示后无需重载视图控制器即可实时修改颜色的需求,可使用以下兼容全版本的实现:

let targetColor = MY_COLOR // 替换为你要设置的目标导航栏背景色

if #available(iOS 15.0, *) {
    guard let navigationBar = self.navigationController?.navigationBar else { return }
    // 同步更新普通状态和滚动边缘状态的外观配置
    navigationBar.standardAppearance.backgroundColor = targetColor
    navigationBar.scrollEdgeAppearance?.backgroundColor = targetColor
} else {
    // 旧系统沿用原有逻辑
    self.navigationController?.navigationBar.barTintColor = targetColor
}

补充说明

  • iOS 15起导航栏使用UINavigationBarAppearance类管理不同场景下的样式,standardAppearance对应页面无滚动时的导航栏样式,scrollEdgeAppearance对应页面滚动到顶部边缘时的导航栏样式,需要同时修改两个配置才能保证所有场景下颜色同步更新
  • 如果你的项目中不需要区分两种状态的导航栏样式,可在全局初始化导航栏时直接将scrollEdgeAppearance赋值为standardAppearance的同一个实例,后续修改时仅需更新standardAppearance即可自动同步到滚动边缘样式
  • 该修改操作执行后导航栏会实时刷新样式,不需要调用reload相关方法重新加载当前视图控制器

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 14:06:02