如何在iOS 5中更改UITabBarItem中文本的颜色
如何在iOS 5中更改UITabBarItem中文本的颜色
在iOS 5中,由于具有更多的外观控制功能,我们如何将UITabBarItem的文本颜色从默认的白色改为其他颜色?\n编辑:有效解决方案\n
[[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];
问题出现的原因是UITextAttributeFont, UITextAttributeTextColor等属性在iOS 7.0中已经被弃用。解决方法是使用新的属性来改变UITabBarItem中文本的颜色。可以使用NSFontAttributeName、NSParagraphStyleAttributeName、NSForegroundColorAttributeName、NSBackgroundColorAttributeName、NSLigatureAttributeName、NSKernAttributeName、NSStrikethroughStyleAttributeName、NSUnderlineStyleAttributeName、NSStrokeColorAttributeName、NSStrokeWidthAttributeName、NSShadowAttributeName和NSVerticalGlyphFormAttributeName这些属性来改变文本的颜色。
问题:如何在iOS 5中更改UITabBarItem中的文本颜色?
原因:iOS 5.0及更高版本中可以通过设置item标签文本属性来自定义选项卡栏的外观。可以使用UIBarItem声明的外观选择器以及“Customizing Appearance”中列出的方法来自定义所有分段控件的外观。可以使用外观代理(例如[UITabBarItem appearance])自定义所有分段控件的外观,也可以自定义单个选项卡栏的外观。还可以使用“Managing the Finished Selected Image”中列出的方法提供已完成的选中和未选中图像,但是这些方法不参与UIAppearance代理API(参见UIAppearance)。UIKit不会对已完成的图像进行任何自动处理。为了获得良好的结果,必须使用setFinishedSelectedImage:withFinishedUnselectedImage:方法提供匹配的已完成选中和未选中图像对。
解决方法:
1. 可以在iOS 5上使用如下代码来更改文本颜色:
if ([self.tabBarItem respondsToSelector:(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]]; }
2. 可以使用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)]}];
3. 在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 }];
4. 无法在iOS 4中设置该属性,但可以自定义选项卡栏以实现相同效果,可以尝试使用第三方库进行自定义,例如:https://github.com/boctor/idev-recipes/tree/master/CustomTabBar。
其他相关问题和解答:
- 问:为什么我在应用程序委托中设置此属性时出现错误?
答:请检查您的构建目标,确保您的构建目标为iOS 5.0。另外,尝试使用[self.tabBarItem setTitleTextAttributes:]方法。
- 问:我可以如何删除选项卡栏图标上的阴影和渐变效果?
答:您可以尝试为选项卡栏设置tintColor,就像为navigationBar一样。您可以使用以下代码:
self.tabBar.tintColor = [UIColor whiteColor];
- 问:您能推荐一些有关自定义外观的有趣文章吗?
答:您可以参考这篇有趣的文章:http://praxisstalled.blogspot.com/2010/08/customising-appearance-of.html