iOS 15导航栏透明问题:Storyboard自定义导航栏颜色失效如何解决?
问题排查与解决方法
1. 你的代码存在核心逻辑错误
你当前代码中创建了一个全新的临时UINavigationController实例,这个实例没有被加入到App的视图层级中,修改它的导航栏配置不会对实际运行的界面生效。
2. 正确的全局配置方案
替换App Delegate中的原有代码,使用UIKit的全局外观代理UINavigationBar.appearance()进行配置,同时补充标题文字颜色设置解决文字无法显示的问题:
if #available(iOS 13.0, *) { let appearance = UINavigationBarAppearance() appearance.configureWithOpaqueBackground() // 设置自定义导航栏背景色 appearance.backgroundColor = UIColor(red: 0.0/255.0, green: 125/255.0, blue: 0.0/255.0, alpha: 1.0) // 配置标题文字颜色为白色,避免深色背景下文字看不见 appearance.titleTextAttributes = [.foregroundColor: UIColor.white] // 如果使用大标题也同步配置 appearance.largeTitleTextAttributes = [.foregroundColor: UIColor.white] // 全局应用到所有导航栏 let navBarAppearance = UINavigationBar.appearance() navBarAppearance.standardAppearance = appearance navBarAppearance.scrollEdgeAppearance = appearance navBarAppearance.isTranslucent = false // 配置导航栏按钮的tint颜色为白色 navBarAppearance.tintColor = .white }
3. Storyboard自定义tint的处理规则
不需要强制删除Storyboard中的自定义tint:
- 代码的全局配置优先级高于Storyboard中的基础配置,冲突时会优先生效
- 如果你希望统一用代码管理导航栏外观,建议将Storyboard中导航栏的背景色、tint色相关配置改为默认值,避免不必要的样式冲突
4. 特殊场景补充
如果你只需要修改某个特定导航控制器的外观,不要创建新的实例,而是拿到该导航控制器的实际引用(比如在Storyboard关联的导航控制器子类、对应根视图控制器的viewDidLoad方法中),对它的navigationBar属性做上述配置即可。
内容的提问来源于stack exchange,提问作者G. Steve
相关产品推荐
相关产品推荐

