在iOS 5中有更多外观控制,我们如何更改UITabBarItem文本颜色?从默认白色到其他颜色?
编辑:工作解决方案
[[UITabBarItem appearance] setTitleTextAttributes:
[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor blackColor], UITextAttributeTextColor,
[UIColor whiteColor], UITextAttributeTextShadowColor,
[NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset,
[UIFont fontWithName:@"Rok" size:0.0], UITextAttributeFont,
nil]
forState:UIControlStateNormal];
答案 0 :(得分:38)
if ([self.tabBarItem respondsToSelector:@selector(setTitleTextAttributes:)]) {
NSLog(@"*** Support method(iOS 5): setTitleTextAttributes:");
[self.tabBarItem setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
[UIFont fontWithName:@"AmericanTypewriter" size:20.0f], UITextAttributeFont,
[UIColor blackColor], UITextAttributeTextColor,
[UIColor grayColor], UITextAttributeTextShadowColor,
[NSValue valueWithUIOffset:UIOffsetMake(0.0f, 1.0f)], UITextAttributeTextShadowOffset,
nil]];
}
Apple关于自定义外观的文档:
在iOS v5.0及更高版本中,您可以通过使用UIBarItem声明的外观选择器设置项目标签文本属性来自定义标签栏的外观。您还可以使用“自定义外观”中列出的方法。您可以使用外观代理(例如,[UITabBarItem外观])或单个选项卡栏自定义所有分段控件的外观。您还可以使用“管理完成的所选图像”中列出的方法提供已完成的选定图像和未选择图像;但是,这些方法不参与UIAppearance代理API(参见UIAppearance)。 UIKit现在为成品图像提供任何自动处理。为了获得良好的结果,您必须使用setFinishedSelectedImage:withFinishedUnselectedImage:。在匹配对中提供已完成的已选择和未选择的图像:。
编辑: 以下是使用 UIAppearance 系统和 NSDictionary 文字语法的另一个示例:
[[UITabBarItem appearance] setTitleTextAttributes:@{
UITextAttributeFont : [UIFont fontWithName:@"AmericanTypewriter" size:20.0f],
UITextAttributeTextColor : [UIColor blackColor],
UITextAttributeTextShadowColor : [UIColor grayColor],
UITextAttributeTextShadowOffset : [NSValue valueWithUIOffset:UIOffsetMake(0.0f, 1.0f)]}];
修改(由@JeremyWiebe撰写): 从iOS 6开始,字典键已更改为与OS X使用的相同:
NSShadow *shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor grayColor];
shadow.shadowOffset = CGSizeMake(0, 1.0);
[[UITabBarItem appearance] setTitleTextAttributes:@{
NSFontAttributeName : [UIFont fontWithName:@"AmericanTypewriter" size:20.0f],
NSForegroundColorAttributeName : [UIColor blackColor],
NSShadowAttributeName : shadow }];
答案 1 :(得分:13)
[[UITabBarItem appearance] setTitleTextAttributes:@{
UITextAttributeFont : [UIFont fontWithName:@"HelveticaNeue-Bold" size:10.0f],
UITextAttributeTextColor : [UIColor colorWithRed:0/255.0 green:48/255.0 blue:92/255.0 alpha:1.0],}
forState:UIControlStateNormal];
[[UITabBarItem appearance] setTitleTextAttributes:@{
UITextAttributeFont : [UIFont fontWithName:@"HelveticaNeue-Bold" size:10.0f],
UITextAttributeTextColor : [UIColor colorWithRed:0/255.0 green:138/255.0 blue:196/255.0 alpha:1.0],}
forState:UIControlStateSelected];
答案 2 :(得分:10)
iOS 7.0中不推荐使用UITextAttributeFont,UITextAttributeTextColor等。
你必须使用:
NSFontAttributeName, NSParagraphStyleAttributeName, NSForegroundColorAttributeName, NSBackgroundColorAttributeName, NSLigatureAttributeName, NSKernAttributeName, NSStrikethroughStyleAttributeName, NSUnderlineStyleAttributeName, NSStrokeColorAttributeName, NSStrokeWidthAttributeName, NSShadowAttributeName and NSVerticalGlyphFormAttributeName
答案 3 :(得分:4)
特别针对iOS 7,尝试使用NSForegroundColorAttributeName而不是UITextAttributeTextColor
答案 4 :(得分:1)
适用于iOS 7.0 +的工作解决方案:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor redColor], NSForegroundColorAttributeName,
nil] forState:UIControlStateNormal];
[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor whiteColor], NSForegroundColorAttributeName,
nil] forState:UIControlStateSelected];
}
答案 5 :(得分:0)
我没有足够的声誉点来添加评论,所以我会在这里添加另一个答案。
我遇到了同样的问题并搜索了过去一小时,最终意识到我的问题是因为我没有将代码放入方法 viewWillAppear 。不知道这是否是常识,因为我刚开始使用objective-c但是认为这应该是答案的另一条重要信息,因为相同的代码在viewDidLoad中没有工作。
根据this post,此代码仅在方法viewWillAppear中有效。