升级Xcode 13及iOS 15后Tab栏、Navigation栏显示异常如何解决?
问题根因
该异常是Xcode13默认适配iOS15+ SDK引入的特性导致的:iOS15后UINavigationBar和UITabBar新增了滚动边缘外观(scrollEdgeAppearance)属性,旧项目升级后没有对该属性做配置时,默认会使用透明背景,你看到的黑色实际是下层window或视图的背景色。当滚动scrollView/tableView时,内容偏移触碰到栏区域,系统会自动切换到默认不透明白色的标准外观(standardAppearance),所以滚动后栏会恢复正常,你已经配置的全局浅色模式代码和该特性不冲突,不需要修改。
修复方案
不需要逐个修改每个业务视图的配置,两种方案都可以全局一次性修复:
方案1:全局代码统一配置(推荐,改动最小)
在App启动方法application:didFinishLaunchingWithOptions:里,和你现有的浅色模式配置放在同一位置,新增以下全局外观代码即可全量生效:
if #available(iOS 13.0, *) { // 全局统一配置导航栏外观 let navBarAppearance = UINavigationBarAppearance() navBarAppearance.configureWithOpaqueBackground() // 可自定义背景色、标题属性等 navBarAppearance.backgroundColor = .white UINavigationBar.appearance().standardAppearance = navBarAppearance UINavigationBar.appearance().scrollEdgeAppearance = navBarAppearance // 全局统一配置Tab栏外观 let tabBarAppearance = UITabBarAppearance() tabBarAppearance.configureWithOpaqueBackground() tabBarAppearance.backgroundColor = .white UITabBar.appearance().standardAppearance = tabBarAppearance UITabBar.appearance().scrollEdgeAppearance = tabBarAppearance }
方案2:Storyboard可视化配置(无需写代码)
直接在Storyboard里全局修改控制器的栏属性即可:
- 选中导航控制器的Navigation Bar,在右侧属性检查器找到Scroll Edge配置项,取消勾选Translucent,再将背景色设置为你需要的白色,Xcode会自动同步两种滚动状态的外观
- 同理选中Tab Bar控制器的Tab Bar,同样取消Translucent勾选,设置背景色为白色即可
内容的提问来源于stack exchange,提问作者tendai
相关产品推荐
相关产品推荐

