UITabBarAppearance在iOS15 iPad上设置标题颜色不生效问题咨询
问题原因
你仅配置了stackedLayoutAppearance样式,但iOS15及以上版本的iPad端,UITabBar默认使用inline布局,你未针对该布局配置样式,因此会显示系统默认的蓝色选中态与默认未选中态,不属于系统Bug,属于遗漏配置项。
解决方案
你需要同时为inline布局、以及iOS15新增的scrollEdgeAppearance配置相同的样式规则,修改后代码如下:
class CustomViewController: UITabBarController { override func viewDidLoad() { super.viewDidLoad() let tabBarAppearnace = UITabBarAppearance() let tabFont = UIFont.boldSystemFont(ofSize: 18) let selectedAttributes: [NSAttributedString.Key: Any] = [NSAttributedString.Key.font: tabFont, NSAttributedString.Key.foregroundColor: UIColor.orange] let normalAttributes: [NSAttributedString.Key: Any] = [NSAttributedString.Key.font: tabFont, NSAttributedString.Key.foregroundColor: UIColor.black] // 适配iPhone竖屏/小屏iPad的堆叠布局 tabBarAppearnace.stackedLayoutAppearance.normal.titleTextAttributes = normalAttributes tabBarAppearnace.stackedLayoutAppearance.selected.titleTextAttributes = selectedAttributes // 新增:适配iPad默认的inline布局 tabBarAppearnace.inlineLayoutAppearance.normal.titleTextAttributes = normalAttributes tabBarAppearnace.inlineLayoutAppearance.selected.titleTextAttributes = selectedAttributes // 新增:适配紧凑宽度下的inline布局(如iPad横屏分屏场景) tabBarAppearnace.compactInlineLayoutAppearance.normal.titleTextAttributes = normalAttributes tabBarAppearnace.compactInlineLayoutAppearance.selected.titleTextAttributes = selectedAttributes tabBar.standardAppearance = tabBarAppearnace // 新增:iOS15+ 滚动到边缘时的TabBar样式,和standard保持一致即可 if #available(iOS 15.0, *) { tabBar.scrollEdgeAppearance = tabBarAppearnace } } }
补充说明
UITabBarAppearance包含三类布局样式,需分别配置才能覆盖所有设备和横竖屏场景:- stackedLayoutAppearance:堆叠布局,对应iPhone竖屏、小尺寸iPad竖屏场景
- inlineLayoutAppearance:内嵌布局,对应常规尺寸iPad的横竖屏场景
- compactInlineLayoutAppearance:紧凑内嵌布局,对应iPad分屏、大屏iPhone横屏场景
- iOS15起UITabBar的
scrollEdgeAppearance默认会使用磨砂透明效果,未赋值的话页面滚动到边缘时TabBar样式会和配置不一致,建议同步赋值。
内容的提问来源于stack exchange,提问作者ImWH
相关产品推荐
相关产品推荐

