Xcode 13中SwiftUI TabView透明度异常,如何恢复旧版本显示样式?
解决Xcode 13编译后SwiftUI TabView半透明问题
该问题本质是iOS 15 SDK对UITabBar的默认外观做了调整,Xcode 13默认使用iOS 15 SDK编译项目,因此触发了半透明效果,要恢复旧版本的不透明样式,可以按以下方案修改:
- 兼容iOS 15+的通用方案
通过全局修改UITabBar的外观实现,需要在App入口的初始化方法中添加如下代码:
init() { if #available(iOS 15.0, *) { let tabBarAppearance = UITabBarAppearance() // 配置为不透明背景 tabBarAppearance.configureWithOpaqueBackground() // 替换为你项目中TabBar需要的背景色 tabBarAppearance.backgroundColor = .white // 同时设置普通状态和滚动边缘状态的外观,避免滚动时样式变化 UITabBar.appearance().standardAppearance = tabBarAppearance UITabBar.appearance().scrollEdgeAppearance = tabBarAppearance } }
如果是用UIKit的AppDelegate,可以把上述代码放到application(_:didFinishLaunchingWithOptions:)方法中。
- iOS 16+ 专属SwiftUI原生方案
如果你的项目最低支持版本为iOS 16,可以直接使用SwiftUI提供的原生修饰符,无需调用UIKit接口:
TabView { // 各Tab页的内容代码 } .toolbarBackground(.visible, for: .tabBar) // 替换为你需要的TabBar背景色 .toolbarBackground(.white, for: .tabBar)
注意:如果需要自定义TabBar的阴影、选中/未选中文字颜色等属性,都可以在对应的Appearance对象或者修饰符中添加配置即可。
内容的提问来源于stack exchange,提问作者M. Montgomery
相关产品推荐
相关产品推荐

