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

