如何更改UITabBar选中颜色

40

我需要将UITabBar的选择颜色从默认蓝色更改为红色。我们如何做到这一点?

13个回答

60

更新于2017年9月: 我写下这篇答案已经两年了,由于它经常被点赞,所以我应该说这可能是对这个问题最糟糕的答案,它容易出错,可能因为iOS更新而崩溃,难以调试等等,所以请不要按照我写的方法去做,并采用更好的解决方案,如子类化UITabBar或UITabBarController。谢谢。

您可以通过设置UITabBar的"tintColor"属性(关键路径)来实现此操作。

  1. 在文档大纲中选择UITabBar。(不是带有黄色图标的控制器。)
  2. 选择Utilities区域中的Identity Inspector。
  3. 点击“User Defined Runtime Attributes”中的“+”号。
  4. 添加一个类型为“Color”的“tintColor”关键路径和您想要的颜色。

这应该就可以了。您可以根据下面的截图进行检查。

enter image description here

更多信息: 在UITabBar的Identity Inspector中有一个“Tint”属性,我认为它会做完全相同的事情,但显然它什么也没做。它的默认值是当选择UITabBarItem时的默认填充颜色,所以我猜想它会在稳定版本的Xcode 7中得到修复。抱着好心态。


你也可以在Xcode 6上完成这个,好答案,这应该是解决方案。 - Alejandro Moya
似乎在Xcode 7的正式版本中仍未修复 - 这个答案让我省了不少麻烦,谢谢! - Blake Lockley

19

1
@KPM,我知道它已经被弃用了,但我们应该使用什么代替它呢?就算这个方法在iOS 8上还能工作,但也值得考虑一下。 - Jared Egan

15

iOS 7中只需使用tintColor即可。实现该功能的一种方式是,通过子类化UITabBarViewController,在storyboard中设置自定义类,并在子类化的tabBarVC的viewDidLoad方法中添加以下内容:

[[self tabBar] setTintColor:[UIColor redColor]];

1
我经常问自己:“为什么我要为像改变颜色这样的小事创建子类?”好问题,为什么不能从父视图自动继承tintColor呢?为什么接口构建器设置没有起作用? - Julian F. Weinert
如何在iOS 8中使用SelectedImageTintColor - codercat
1
[self.tabBarController.tabBar setTintColor:[UIColor redColor]]; 这样也可以实现相同的效果。 - Gellie Ann
如果您想为未选中的文本设置颜色,可以使用unselectedItemTintColor - TheEye

15

enter image description here

要达到上述结果,请执行以下步骤。

步骤1:将所需的图像添加到Assets.xcassets中,并确保它们的Render As为:Default

enter image description here

步骤2:选择您的UITabBar对象并设置图像色调颜色,该颜色将成为选定的选项卡颜色

enter image description here

步骤三:选择 UITabBar 对象并在用户定义的运行时属性中添加 关键路径: unselectedItemTintColor类型Color选择未选中项目的颜色

enter image description here

全部完成。


1
点赞,兄弟!! - Mushrankhan

11

这非常容易

创建一个自定义的 UITabBarController 类,并在 -(void)viewDidLoad 方法中添加以下代码:

[[self tabBar] setSelectedImageTintColor:[UIColor greenColor]]; 

但这只会改变文本的颜色,而不是整个选择区域。有什么办法可以实现这一点吗? - Vaibhav Saran

6

iOS 7中UITextAttributeTextColor已经被废弃,你应该使用:

[UITabBarItem.appearance setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor greenColor]} forState:UIControlStateNormal];    
[UITabBarItem.appearance setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor purpleColor]} forState:UIControlStateSelected];

5
从iOS 8开始,它变得非常简单:
UITabBar.appearance().tintColor = UIColor.redColor()

5
只需在TabBar的Interface Builder中更改以下属性即可。 显然,在我的情况下是白色。

4

SDK并不容易做到这一点,但在技术上是可能的。显然,苹果认为这是他们实现一致外观和感觉视觉效果的一部分。

UITabBar是UIView的子类。您可以始终创建自己的子类并实现-drawRect:方法:

然而,这并不是一个简单的任务。您必须从头开始重新实现该类,否则会出现一些奇怪的副作用。


4

Swift 5的程序化

在Swift 5中非常容易实现。

在你的TabBarController中编写以下代码:

tintColor = UIColor.red  

就是这样


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接