iOS13/Xcode11下大标题导航栏变黑问题求助
解决iOS13大标题导航栏背景变黑+状态栏异常问题
我之前也踩过这个坑!iOS13给导航栏引入了全新的UINavigationBarAppearance系统,大标题模式下的导航栏会优先使用scrollEdgeAppearance而非传统的外观配置——这就是你改普通标题正常、大标题出问题的核心原因。下面是具体的修复方案:
一、代码层面修复(推荐,覆盖所有场景)
你可以在AppDelegate的didFinishLaunchingWithOptions方法里全局配置,也可以在单个导航控制器的初始化代码中设置:
Swift版本
// 创建导航栏外观实例 let appearance = UINavigationBarAppearance() // 设置导航栏背景色为白色 appearance.backgroundColor = .white // 配置大标题和普通标题的文字颜色(按需调整) appearance.largeTitleTextAttributes = [.foregroundColor: UIColor.black] appearance.titleTextAttributes = [.foregroundColor: UIColor.black] // 移除模糊效果,确保背景色完全生效 appearance.backgroundEffect = nil // 给导航栏的两个关键外观赋值:普通状态、大标题展开(滚动到顶部)状态 UINavigationBar.appearance().standardAppearance = appearance UINavigationBar.appearance().scrollEdgeAppearance = appearance // 强制使用浅色模式的barStyle UINavigationBar.appearance().barStyle = .default
Objective-C版本
UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init]; appearance.backgroundColor = [UIColor whiteColor]; appearance.largeTitleTextAttributes = @{NSForegroundColorAttributeName: [UIColor blackColor]}; appearance.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor blackColor]}; appearance.backgroundEffect = nil; [UINavigationBar appearance].standardAppearance = appearance; [UINavigationBar appearance].scrollEdgeAppearance = appearance; [UINavigationBar appearance].barStyle = UIBarStyleDefault;
二、Storyboard可视化修复
如果你习惯用界面编辑器配置:
- 选中导航栏,打开Attributes Inspector(右侧属性面板)
- 找到Appearance区域,展开Scroll Edge(这是大标题模式下生效的外观配置)
- 将Background颜色设置为白色,同时调整标题文字颜色等属性
- 确保Standard外观的背景色与之一致,并且Bar Style设为
Default
三、状态栏异常额外检查
如果设置后状态栏仍为黑色,需要确认两点:
- 在
Info.plist中,将UIViewControllerBasedStatusBarAppearance设置为YES - 在对应的ViewController中重写状态栏样式:
override var preferredStatusBarStyle: UIStatusBarStyle { return .darkContent // 白色背景下显示黑色文字,若需要白色文字则用.lightContent }
(注:iOS13+新增的.darkContent比.default更适配浅色背景场景)
按上述步骤配置后,大标题模式下的导航栏背景和状态栏就能正常显示白色,不会再出现变黑的情况了。
内容的提问来源于stack exchange,提问作者bastianfischer
相关产品推荐
相关产品推荐

