You need to enable JavaScript to run this app. iOS15 使用UINavigationBarAppearance设置导航栏后状态栏图标消失怎么办
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 21:06:05