如何更改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中非活动标签栏图标的颜色?的主要内容,如果未能解决你的问题,请参考以下文章