我需要将 UITabBar 的选择颜色从默认的蓝色更改为红色。我们如何做到这一点。
13 回答
2017 年 9 月更新: 我写这个答案已经两年了,因为它经常收到支持,我应该说这可能是这个问题的最糟糕的答案,它容易出错,可能会因为 iOS 更新而中断,很难调试等,所以请不要做我写的事情并应用更好的解决方案,例如子类化 UITabBar 或 UITabBarController。谢谢。
您可以通过为您的 UITabBar 设置“tintColor”属性(键路径)来做到这一点。
- 在文档大纲中选择 UITabBar。(不是带有黄色图标的控制器。)
- 在 Utilities 区域中选择 Identity Inspector。
- 单击“用户定义的运行时属性”中的 +。
- 添加“颜色”类型的“tintColor”键路径和您想要的颜色。
这应该这样做。您可以对照下面的屏幕截图进行检查。
更多信息: UITabBar 的 Identity Inspector 中有一个“Tint”属性,我相信它会做同样的事情,但显然,它什么也没做。它的默认值是选择 UITabBarItem 时的确切默认填充颜色,所以我猜它会在稳定版本 Xcode 7 中修复。手指交叉。
在 IOS5 中,UITabBar 有一个selectedImageTintColor属性,可以满足您的需要。
在 iOS 7 中,它只是 tintColor。实现此目的的一种方法是继承 UITabBarViewController,在情节提要中设置自定义类,并在viewDidLoad
子类化 tabBarVC 的方法中添加:
[[self tabBar] setTintColor:[UIColor redColor]];
这非常容易
创建一个自定义类的UITabBarController并在-(void)viewDidLoad
方法中添加以下行:
[[self tabBar] setSelectedImageTintColor:[UIColor greenColor]];
因为 UITextAttributeTextColor 在 iOS 7 中已被弃用,您应该使用:
[UITabBarItem.appearance setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor greenColor]} forState:UIControlStateNormal];
[UITabBarItem.appearance setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor purpleColor]} forState:UIControlStateSelected];
只需在界面生成器中更改 TabBar 的以下属性
显然在我的情况下它是白色的。
从 iOS 8 开始,它很简单:
UITabBar.appearance().tintColor = UIColor.redColor()
SDK 并没有使这变得容易,但在技术上是可行的。苹果显然认为这是他们一致外观和感觉愿景的一部分。
UITabBar 是 UIView 的子类。你总是可以继承并实现你自己的-drawRect:
这不是一项简单的任务,但是,您必须从头开始重新实现该类,否则您将面临一些奇怪的副作用。
Swift 5 以编程方式
在 Swift 5 中这很容易。
在你TabBarController
写这个:
tintColor = UIColor.red
而已
我一直在寻找一种方法来设置 UITabBarItem 的选定文本颜色,并找到了一个非常简单的方法,使用 UIAppearance 协议。
[UITabBarItem.appearance setTitleTextAttributes:@{
UITextAttributeTextColor : [UIColor greenColor] } forState:UIControlStateNormal];
[UITabBarItem.appearance setTitleTextAttributes:@{
UITextAttributeTextColor : [UIColor purpleColor] } forState:UIControlStateSelected];
请原谅可怕的颜色!
iOS 5.0 修复了这个问题,但解决方案是在保密协议下。在您的文档中查找 UITabBar 以获得一种简单的方法来做您想做的事情。