如何通过代码禁用Storyboard中UITabBar的Standard外观以适配iOS12
解决方案
首先明确:你在Storyboard中设置的Standard外观属于iOS 13+专属配置,会在Storyboard解码加载阶段就被读取解析,执行时机远早于你写的版本判断代码,所以仅在else分支写代码无法避免iOS 12的崩溃,需要按以下步骤处理:
- 第一步:先打开Storyboard,找到对应UITabBar的属性检查器,把
Appearances选项从Standard改回默认的Default,移除Storyboard中写入的高版本专属配置。 - 第二步:在版本判断分支中分别用对应系统的API配置外观,参考代码如下:
if #available(iOS 13.0, *) { // iOS 13+ 自行创建外观配置,实现你要的样式 let appearance = UITabBarAppearance() // 在这里设置你需要的外观属性,比如背景色、图标文字样式等 appearance.configureWithDefaultBackground() // 赋值给tabBar的对应属性 tabBar.standardAppearance = appearance // 如果需要适配iOS 15+滚动边缘的样式,也可以加上以下配置 if #available(iOS 15.0, *) { tabBar.scrollEdgeAppearance = appearance } } else { // iOS 12 直接用旧版API配置样式即可,不需要额外做禁用操作 tabBar.barTintColor = // 你需要的背景色 tabBar.tintColor = // 你需要的选中项颜色 tabBar.unselectedItemTintColor = // 你需要的未选中项颜色 }
补充说明:如果你的项目中多个页面都用了相同的UITabBar样式,也可以直接在iOS 13+分支设置
UITabBar.appearance()的全局外观,不用每个页面单独配置。
内容的提问来源于stack exchange,提问作者geohei
相关产品推荐
相关产品推荐

