我想在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???
答案 0 :(得分:13)
确实没有简单的方法来改变非活动图像的颜色。在故事板中似乎根本不可能做到。虽然有一个非常简单的解决方案 - 只需为项目分配一个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
在你的故事板中,将所有UITabBarItem的Class字段填充到新创建的子类名称中 - 这就是它!
答案 1 :(得分:1)
Apple不鼓励更改活动项目的色调,因为色盲用户很难区分哪个标签栏项目处于活动状态。
话虽如此,即使您仍然需要不同颜色的非活动项目图标,您也应该使用tabBarItem
方法返回的图像初始化视图控制器初始化程序中的imageWithRenderingMode:
属性。
像
这样的东西- (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
代理提供的色调颜色。
答案 2 :(得分:0)
将此添加到您的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"];