如何在iOS 7中更改tabBarItems的文本和图标颜色?

时间:2013-09-11 07:09:23

标签: uitabbarcontroller uitabbar tabbar uitabbaritem ios7

如何在iOS 7中更改UITabBar和UITabBarItems的文本和图标颜色?对于未选中的tabbar项,默认的灰色文本看起来很暗,很难阅读。

11 个答案:

答案 0 :(得分:69)

您需要做两件事:

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];

答案 1 :(得分:43)

这对我来说很有用,可以在标签栏中标记不活动的项目

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

//在这里你需要使用你想要的颜色的图标,因为它将被渲染为

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

//此图标用于选定的标签,它将按照

中的定义进行着色
self.tabBar.tintColor
item.selectedImage = [UIImage imageNamed:@"selected.png"];

答案 2 :(得分:11)

爱德的答案是完美的,但让我补充一点。 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];

答案 3 :(得分:7)

在iOS 8中测试永久文字颜色(选定/未选定)和图像颜色(选中/未选中)不用创建两个不同颜色的图像foreach选项卡:

文字颜色:

[[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

答案 4 :(得分:6)

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

如果您只是使用iOS 10,则可以更改选项卡栏中的图像色调

enter image description here

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

enter image description here

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

enter image description here

答案 5 :(得分:3)

这应该适用于iOS 8

对于未选中的tabbar项目:

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

对于选定的标签栏项目:

[[UITabBar appearance] setTintColor:[UIColor orangeColor]];

答案 6 :(得分:2)

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

答案 7 :(得分:0)

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

答案 8 :(得分: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"];
    }

答案 9 :(得分:0)

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

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

我在AppDelegate类中使用了以下代码:(兼容&gt; = IOS9)

[[UIView appearanceWhenContainedInInstancesOfClasses:@[[UITabBar class]]] 
                                        setTintColor:[UIColor lightGrayColor]];

答案 10 :(得分:0)

现在iOS10中的人可以使用

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

更改TabBarItem图片和处于未选择状态的文本的默认颜色。

因此,tintColorunselectedItemTintColor这对属性使我们可以完全控制商品的颜色。