我在Google上搜索了很多,但没有找到一个直截了当而且完整的答案。
我想自定义我的UITabBarController
,使之满足以下要求:
UITabBar
本身完全是黑色的- 项目标题的文本颜色在非高亮状态下为白色
- 项目标题的文本颜色在高亮状态下为红色
- 在选项卡栏中使用多彩图标
1. 将UITabBar
变成黑色
我猜我需要使用UIAppearance
API来做到这一点,实际上我能够使用以下代码将UITabBar
变成黑色:[[UITabBar appearance] setBarTintColor:[UIColor blackColor]];
。
2. 和 3. 修改项目标题的颜色
然而,项目文本的颜色似乎不符合我的要求,在Google搜索后,以下解决方案对我有意义,但它只将非高亮状态改为白色,高亮状态仍然是白色...
NSDictionary *titleAttributes = @{NSForegroundColorAttributeName : [UIColor whiteColor]};
[[UITabBarItem appearance] setTitleTextAttributes:titleAttributes forState:UIControlStateNormal];
UIColor *titleHighlightedColor = [UIColor redColor];
NSDictionary *highlightedTitleAttributes = @{NSForegroundColorAttributeName : titleHighlightedColor};
[[UITabBarItem appearance] setTitleTextAttributes:highlightedTitleAttributes forState:UIControlStateHighlighted];
4. 多彩图标
关于多彩图标,目前我的做法是在Storyboard中简单地将图标设置为:
但这并不符合我的要求,因为当项目没有被选择时,它只会以灰色显示整个图标。而当项目被选择时,图标会完全消失。
这是原始图标:
这是项目未被选择时的外观:
这是被选择时的状态,如上所述,图标完全消失:
那么,我的问题是如何精确实现上述要求?我当前缺少什么?我是否最好在代码中完成所有操作而不是在Storyboard中完成?
注意:我的目标是iOS版本大于7.0,如果行为在iOS 7和iOS 8之间有差异,请包括任何特定于版本的信息。
UIControlStateHighlighted
而不是UIControlStateSelected
,感谢您指出! :) 另外,关于UIImageRenderingMode
的提示真的很有帮助! - nburkUITabBarItem.appearance().setTitleTextAttributes
只能用来自定义.font
.foregroundColor
和.shadow
,而不能用于其他键(参考https://developer.apple.com/documentation/uikit/uibaritem/1616414-settitletextattributes)。 - Axel Guilmin