27

如何在 iOS 7 中更改 UITabBar 和 UITabBarItems 的文本和图标颜色?对于未选择的标签栏项目,默认的灰色文本似乎很暗,难以阅读。

4

11 回答 11

70

为此,您需要做两件事:

1)如果要自定义TabBar本身,需要为tabBarController设置barTintColor:

    // this will generate a black tab bar
    tabBarController.tabBar.barTintColor = [UIColor blackColor];

    // this will give selected icons and text your apps tint color
    tabBarController.tabBar.tintColor = appTintColor;  // appTintColor is a UIColor *

2) 为要覆盖的每个状态设置 tabBarItem 文本外观:

[[UITabBarItem appearance] setTitleTextAttributes:@{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Bold" size:10.0f],
                                                    NSForegroundColorAttributeName : appTintColor
                                                    } forState:UIControlStateSelected];


// doing this results in an easier to read unselected state then the default iOS 7 one
[[UITabBarItem appearance] setTitleTextAttributes:@{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Bold" size:10.0f],
                                                    NSForegroundColorAttributeName : [UIColor colorWithRed:.5 green:.5 blue:.5 alpha:1]
                                                    } forState:UIControlStateNormal];
于 2013-09-11T07:09:22.603 回答
44

这对我有用,可以为标签栏中的非活动项目着色

UITabBarItem *item = [self.tabBar.items objectAtIndex:1];

// 这里你需要使用你想要的颜色的图标,因为它会按原样渲染

item.image = [[UIImage imageNamed:@"unselected.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

// 此图标用于选定的选项卡,它将按照中的定义进行着色

self.tabBar.tintColor
item.selectedImage = [UIImage imageNamed:@"selected.png"];
于 2013-10-29T17:48:29.367 回答
12

Ed 的回答很完美,但让我补充一点。TabBar 默认是半透明的,因此会受到 TabBar 下视图颜色的影响(即每个成员 viewController 的视图颜色都会影响 TabBar 的外观。)。

所以我设置下面的代码不受影响。

self.tabBarController.tabBar.translucent = false;

与 Ed 的回答一起,是我现在使用的完整代码。

self.tabBarController.tabBar.barTintColor = [UIColor blackColor];
self.tabBarController.tabBar.translucent = false;
self.tabBarController.tabBar.tintColor = [UIColor blueColor];
于 2013-10-23T05:20:50.660 回答
7

在 iOS 8 中测试了永久文本颜色(选中/未选中)和图像颜色(选中/未选中),而没有为每个选项卡创建两个具有不同颜色的图像:

文字颜色:

[[UITabBar appearance] setTintColor: selectedTabColor ];
    [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                       **yourFont**, NSFontAttributeName,
                                                       ** selectedTabColor**, NSForegroundColorAttributeName,
                                                       nil] forState:UIControlStateNormal];

    [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                       **yourFont**, NSFontAttributeName,
                                                       **selectedTabColor**, NSForegroundColorAttributeName,
                                                       nil] forState:UIControlStateSelected];

图像颜色:(假设原始图像具有您想要显示为未选中的颜色)

UITabBarController子类 -awakeFromNib 中:

    for (int i =0; i<self.viewControllers.count; i++)
    {
        UITabBarItem *tab = [self.tabBar.items objectAtIndex:i];
        tab.image = [tab.image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    }

致谢:整个互联网和堆栈溢出 XD

于 2015-09-04T16:43:36.327 回答
7

在标签栏中更改文本颜色的无代码方式:

如果您只是使用 iOS 10,那么您可以更改标签栏中的图像色调

在此处输入图像描述

如果您还支持 iOS 9 及更低版本,那么您还必须将 tintColor 添加到每个选项卡栏项中的用户定义器运行时属性

在此处输入图像描述

如果您还想更改图标颜色,请确保您的资产文件夹中有正确的彩色图像并将渲染更改为原始图像

在此处输入图像描述

于 2016-10-28T16:54:29.627 回答
3

这也适用于 iOS 8

对于未选中的标签栏项目:

[[UIView appearanceWhenContainedIn:[UITabBar class], nil] setTintColor: [UIColor whiteColor]];

对于选定的标签栏项目:

[[UITabBar appearance] setTintColor:[UIColor orangeColor]];
于 2015-02-17T14:12:34.607 回答
2
[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                           [UIColor whiteColor], UITextAttributeTextColor,
                                                           nil] 
于 2014-02-15T09:03:08.963 回答
0

用于self.tabBarController.tabBar.barStyle = UIBarStyleBlack;使标签栏变黑

于 2013-09-25T08:22:59.927 回答
0

你试一下

for (UITabBarItem *item in self.tabBarController.tabBar.items) {
        item.image = [[UIImage imageNamed:@"youimage.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

        [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                           [UIColor whiteColor], UITextAttributeTextColor,
                                                           nil] forState:UIControlStateNormal];

        item.selectedImage = [UIImage imageNamed:@"youimage.png"];
    }
于 2013-12-08T15:45:59.937 回答
0

@Usharao 上面的答案对我有用;

我的问题是在启动时我的所有 TabBarItems 似乎都处于选定状态,都具有相同的“蓝色”着色。通过一一选择所有选项卡,颜色状态将得到纠正。

我在我的 AppDelegate 类中使用了以下代码:(兼容 >= IOS9)

[[UIView appearanceWhenContainedInInstancesOfClasses:@[[UITabBar class]]] 
                                        setTintColor:[UIColor lightGrayColor]];
于 2018-05-05T13:11:56.263 回答
0

现在从iOS10一个可以使用

@property (nonatomic, readwrite, copy, nullable) UIColor *unselectedItemTintColor

在未选中状态下更改TabBarItem图像和文本的默认颜色。

tintColor因此,这对属性unselectedItemTintColor让我们可以完全控制项目的颜色。

于 2019-04-14T16:57:46.540 回答