iOS15 使用UINavigationBarAppearance设置导航栏后状态栏图标消失怎么办
问题根因
iOS15开始UINavigationBar的官方推荐样式配置方式切换为UINavigationBarAppearance,原有旧API的barStyle配置优先级降低未生效,系统默认使用深色内容的状态栏样式,在黑色导航栏背景下文字和图标和背景融为一体,就出现了“消失”的视觉效果。
解决方案
全局生效方案
在你现有导航栏配置代码的末尾补充barStyle设置即可,完整可运行代码如下:
let appearance = UINavigationBarAppearance() appearance.configureWithTransparentBackground() appearance.backgroundColor = .black appearance.titleTextAttributes = [.foregroundColor: UIColor.white] appearance.largeTitleTextAttributes = [.foregroundColor: UIColor.white] UINavigationBar.appearance().standardAppearance = appearance UINavigationBar.appearance().scrollEdgeAppearance = appearance // 补充该行配置强制状态栏内容为浅色 UINavigationBar.appearance().barStyle = .black
如果以上修改未生效,检查项目info.plist配置:
- 若
View controller-based status bar appearance设置为NO,直接在info.plist中新增Status bar style配置项,值设为UIStatusBarStyleLightContent即可全局生效。
单页面自定义方案
如果不同页面需要适配不同的状态栏样式,保持info.plist中View controller-based status bar appearance为YES,先给UINavigationController添加扩展,让状态栏样式跟随当前顶层显示的子页面配置:
extension UINavigationController { open override var preferredStatusBarStyle: UIStatusBarStyle { return topViewController?.preferredStatusBarStyle ?? .default } }
之后在需要浅色状态栏的对应ViewController中重写属性即可:
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
内容的提问来源于stack exchange,提问作者user3626411
相关产品推荐
相关产品推荐

