任何人都可以帮助我解决这个奇怪的问题,无论如何都要将uitabbar项目的文本颜色从默认灰色更改为白色,将所选颜色更改为蓝色。
答案 0 :(得分:74)
老问题,但我有一个在iOS 5以后支持的新答案(我也使用LLVM 4.0文字)
[[UITabBarItem appearance] setTitleTextAttributes:@{ NSForegroundColorAttributeName : [UIColor whiteColor] }
forState:UIControlStateNormal];
[[UITabBarItem appearance] setTitleTextAttributes:@{ NSForegroundColorAttributeName : [UIColor blueColor] }
forState:UIControlStateSelected];
答案 1 :(得分:11)
UITextAttributeTextColor 。改为使用 NSForegroundColorAttributeName 。
[[UITabBarItem appearance] setTitleTextAttributes:@{ NSForegroundColorAttributeName : [UIColor blackColor] }
forState:UIControlStateNormal];
在Swift中
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.blackColor()], forState: .Normal)
答案 2 :(得分:2)
编辑:以下不再是最佳做法,因为新的API已添加到iOS SDK
子类UITabBarController(在此示例中为CustomTabBarController)并将以下代码放在.m实现文件中:
@interface CustomTabBarController()
@property (nonatomic, retain) NSArray *tabTitleLabels;
@end
@implementation CustomTabBarController
@synthesize tabTitleLabels;
- (NSArray *)tabTitleLabels
{
// Check if we need to update the tab labels
if ([tabTitleLabels count] != [self.viewControllers count])
self.tabTitleLabels = nil;
// Create custom tab bar title labels
if (!tabTitleLabels)
{
tabTitleLabels = [[NSMutableArray alloc] init];
for (UIView *view in self.tabBar.subviews)
{
if ([NSStringFromClass([view class]) isEqualToString:@"UITabBarButton"])
{
for (UIView *subview in view.subviews)
{
if ([subview isKindOfClass:[UILabel class]])
{
UILabel *label = (UILabel *)subview;
UILabel *newLabel = [[UILabel alloc] init];
newLabel.font = label.font;
newLabel.text = label.text;
newLabel.backgroundColor = label.backgroundColor;
newLabel.opaque = YES;
newLabel.frame = CGRectMake(0, 0, label.frame.size.width, label.frame.size.height -1);
[subview addSubview:newLabel];
[((NSMutableArray *)tabTitleLabels) addObject:newLabel];
[newLabel release];
}
}
}
}
}
return tabTitleLabels;
}
// Customize the desired colors here
- (void)recolorTabBarTitleLabels
{
for (UILabel *label in self.tabTitleLabels)
{
label.textColor = [UIColor whiteColor];
label.backgroundColor = [UIColor blackColor];
}
UILabel *selectedLabel = [self.tabTitleLabels objectAtIndex:self.selectedIndex];
selectedLabel.textColor = [UIColor blueColor];
selectedLabel.backgroundColor = [UIColor colorWithWhite:.15 alpha:1];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self recolorTabBarTitleLabels];
}
- (void)tabBarController:(UITabBarController *)theTabBarController didSelectViewController:(UIViewController *)viewController
{
[self recolorTabBarTitleLabels];
}
- (void)viewDidUnload
{
[super viewDidUnload];
self.tabTitleLabels = nil;
}
- (void)dealloc
{
[tabTitleLabels release];
[super dealloc];
}
@end
这可能晚了一年,但我希望我的代码可以节省一些工作!
注意:它不支持切换/切换新的标签栏项目,但您只需将tabTitleLabels重置为nil即可。
答案 3 :(得分:2)
它可能会帮助你
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName:UIColor.whiteColor()], forState: .Selected)
答案 4 :(得分:1)
UITabBarItem几乎不可自定义,所以如果必须,你可以:
通过迭代UITabBar
的子视图,通过使用-[NSObject isKindOfClass:]
查找标签并更改其颜色来实现背驮式。
创建您自己的UITabBar
并滚动自定义标签栏项目。
尝试使用Three20的TTTabBar
。
答案 5 :(得分:1)
要一次设置2 UIControlState
的颜色,您可以使用union
:
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.redColor()], forState: UIControlState.Selected.union(UIControlState.Highlighted))
答案 6 :(得分:1)
<强> Swift3 强>
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.brown], for: .normal)
答案 7 :(得分:0)
查看this question和this question的答案,但请注意,您的应用可能会因修改默认的标签栏组件而被拒绝。
答案 8 :(得分:0)
保持简单!
[[UITabBar appearance] setTintColor:[UIColor blackColor]];
答案 9 :(得分:0)
从iOS 10开始,可以在unselectedItemTintColor
上设置UITabBar
。
tintColor
的{{1}}不是selectedItem的颜色。
如果您想要查看任何项目的唯一值,您还可以直接与UITabBar
和tabBarItem.titleTextAttributes(for:)
一起设置项目tabBarItem.image
(前面提到过)。