如何更改ios7中非活动标签栏图标的颜色?

Posted

技术标签:

【中文标题】如何更改ios7中非活动标签栏图标的颜色?【英文标题】:How to change color of inactive tab-bar icons in ios7? 【发布时间】:2014-02-05 00:43:22 【问题描述】:

我想在ios7的标签栏中更改非活动图标的颜色。

我知道如何为选定的 TabBar 项设置颜色,但我不知道如何为非活动的 TabBar 项设置颜色。

有人知道怎么做吗? 提前致谢!!

这是我在 appDelegate.m 中的代码

//tint color for tabbar
[UITabBar appearance].barTintColor = [UIColor colorWithRed:0.077 green:0.411 blue:0.672 alpha:1.000];

//tint color for the text of inactive tabbar item.
[[UITabBarItem appearance] setTitleTextAttributes:@NSForegroundColorAttributeName:        [UIColor whiteColor] forState:UIControlStateNormal];

//tint color for the text of selected tabbar item.
[[UITabBarItem appearance] setTitleTextAttributes:@NSForegroundColorAttributeName:        [UIColor orangeColor] forState:UIControlStateSelected];

//tint color for the selected tabbar item.
[[UITabBar appearance] setTintColor:[UIColor whiteColor]];

//tint color for the inactive tabbar items.
//Question:how can I set tint color for the inactive tabbar items???

【问题讨论】:

我相信tab bar的tint color是非活动标签的颜色,因为还有一个selectedImageTintColor。虽然没有实际测试,但我不是 100% 确定这一点。 @foriinrangeawesome 你错了。苹果真的把这件事搞砸了。 selectedImageTintColor 被忽略,非活动选项卡始终为灰色,没有 API 可以更改它。 苹果真的应该修改它的文档 虽然似乎有一种解决方法。见***.com/questions/18894985/… @maddy 真的!!!??有没有办法改变它!?太糟糕了…… 【参考方案1】:

确实没有简单的方法可以更改非活动图像的颜色。似乎根本不可能在情节提要中完成。不过有一个非常简单的解决方案——只需为项目分配一个具有imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal 渲染模式的图像。

鉴于您的图像最初已经为非活动状态着色,您可以使用以下实现创建UITabBarItem 的简单自定义子类

@implementation P2TabBarItem

- (void)awakeFromNib 
    [self setImage:self.image]; // calls setter below to adjust image from storyboard / nib file


- (void)setImage:(UIImage *)image 
    [super setImage:[image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
    self.selectedImage = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];


@end

在情节提要中,将所有 UITabBarItems 的 Class 字段填充为新创建的子类名称 - 就是这样!

【讨论】:

我什至对你不能简单地定义一个非活动的色调颜色并不感到惊讶,毕竟它是苹果......【参考方案2】:

Apple 不鼓励仅仅因为色盲用户很难区分哪个标签栏项目处于活动状态,所以不鼓励更改活动项目的色调。

话虽如此,即使您仍然想要不同颜色的非活动项目图标,您也应该在视图控制器的初始化程序中使用从 imageWithRenderingMode: 方法返回的图像初始化您的 tabBarItem 属性。

类似

- (instancetype)initWithCoder:(NSCoder *)aDecoder

    self = [super initWithCoder:aDecoder];

    if (self) 
        UIImage * tabImage = [[UIImage imageNamed:@"InactiveImage"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
        UIImage * selectedTabImage = [[UIImage imageNamed:@"ActiveImage"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
        self.tabBarItem = [[UITabBarItem alloc] initWithTitle:NSLocalizedString(@"Item", @"Tab bar button title for 'Item'")
                                                        image:tabImage
                                                selectedImage:selectedTabImage];
    ;
    return self;

这种方式项目将在您提供的图标之间切换,而不会在它们上添加色调。但文本仍会切换您通过代码中的 IB 或 appearance 代理提供的色调颜色。

【讨论】:

【参考方案3】:

将此添加到您的 UITabBarController

UITabBarItem *item0 = [self.tabBar.items objectAtIndex:0];
//unselected icon
item0.image = [[UIImage imageNamed:@"your_icon.png"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
//selected icon
item0.selectedImage = [UIImage imageNamed:@"your_icon.png"];

【讨论】:

以上是关于如何更改ios7中非活动标签栏图标的颜色?的主要内容,如果未能解决你的问题,请参考以下文章

更改非活动标签栏图标的颜色

在 iOS 7 上更改标签栏色调颜色

如何快速更改标签栏未选择图标的颜色?

如何在 Ionic 4 中更改标签栏和标签图标的背景颜色

如何更改标签栏图标的突出显示颜色? (iPhone/iPad)

iOS7标签栏自定义图标高度 - 高度减小直到图标变得不可见