【发布时间】:2021-11-19 20:45:27
【问题描述】:
更新到 iOS 15 后,我以这种方式实现了 UITabBar 配置:
let backgroundColor = UIColor.grey
let selectedItemTextColor = UIColor.blue
let unselectedItemTextColor = UIColor.black
if #available(iOS 15, *) {
let tabBarAppearance = UITabBarAppearance()
tabBarAppearance.backgroundColor = backgroundColor
tabBarAppearance.stackedLayoutAppearance.selected.titleTextAttributes = [.foregroundColor: selectedItemTextColor]
tabBarAppearance.stackedLayoutAppearance.normal.titleTextAttributes = [.foregroundColor: unselectedItemTextColor]
tabBar.standardAppearance = tabBarAppearance
tabBar.scrollEdgeAppearance = tabBarAppearance
} else {
UITabBarItem.appearance().setTitleTextAttributes([.foregroundColor: selectedItemTextColor], for: .selected)
UITabBarItem.appearance().setTitleTextAttributes([.foregroundColor: unselectedItemTextColor], for: .normal)
tabBar.barTintColor = backgroundColor
}
这适用于 iOS 15 及更早版本。
但在我的项目中,我需要为选项卡栏项目之一设置选定/未选定的文本颜色,与其他项目不同。在运行时设置。
有 5 个标签栏项目。在某些时候,我需要这种行为:其中四个应该具有蓝色/黑色文本颜色(用于选定/未选定状态),一个应该具有红色/绿色。
在 iOS 15 之前,我使用此代码在每一刻设置所需项目的颜色:
let indexOfItemToChange = 4
tabBar.items[indexOfItemToChange].setTitleTextAttributes([.foregroundColor: UIColor.red], for: .selected)
tabBar.items[indexOfItemToChange].setTitleTextAttributes([.foregroundColor: UIColor.green], for: .normal)
更新到 iOS 15 后,它不起作用。我试过这样设置:
let indexOfItemToChange = 4
tabBar.items[indexOfItemToChange].standardAppearance?.stackedLayoutAppearance.normal.titleTextAttributes = [.foregroundColor: UIColor.green]
tabBar.items[indexOfItemToChange].standardAppearance?.stackedLayoutAppearance.selected.titleTextAttributes = [.foregroundColor: UIColor.red]
但它也没有效果。即使在设置标签栏项目颜色之前我为每个标签栏项目设置了 UITabBar 外观:
tabBar.items.forEach {
$0.standardAppearance = standardAppearance
$0.scrollEdgeAppearance = scrollEdgeAppearance
}
有人遇到过这个问题吗?有什么建议吗?
PS。在我的项目中,没有 xib 和故事板。所以我只需要以编程方式解决我的问题。
【问题讨论】: