微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在iOS 7和iOS 8上正确定制UITabBar和UITabBarItem?

在这么多googling,但无处找到一个直接和综合的答案.

我想自定义myUITabBarController,使得:

> UITabBar本身是完全黑色的
>项目标题文本颜色为非突出显示状态的白色
>项目标题文本颜色在突出显示状态为红色
>在标签栏中使用多彩图标

将UITabBar转黑

我猜想我需要使用UIAppearance API,实际上我可以使用以下方式转换UITbarBar黑色:[[UITabBar外观] setBarTintColor:[UIColor blackColor]] ;.

2.和3.修改项目标题的颜色

然而,文本项目的颜色似乎没有做我想要的,在谷歌搜索之后,以下解决方案对我有意义,但它只将非突出显示的状态更改为白色,突出显示保持白色以及…

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];

多彩多姿的物品

关于多彩多姿的图标,到目前为止的方法是简单地在Storyboards中设置图标,如下所示:

但是这并不是我想做的,只有在没有选择该项目的时候,它才会显示灰色的整个图标.当选择项目时,图标将完全消失.

这是原始图标:

这是当未选择项目时的外观:

在这里它是被选定的,如所提到的图标完全消失:

所以我的问题是我能如何达到上述要求.我目前缺少什么?我最好在代码中做所有的事情,而不是在故事板中吗?

注意:我的目标是iOS版本大于7.0,因此如果iOS 7和iOS 8之间的行为有所不同,请包含任何特定于版本的信息.

解决方法

我和你有同样的问题.据我所知,不同的iOS版本没有区别.
我以编程方式解决了这个问题:

>转动条黑色作品如下(您已经说过)(在AppDelegate中):

UITabBar.appearance().barTintColor = UIColor.blackColor()
>要设置不同状态的标题的颜色,我使用这个代码(在AppDelegate中):

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName!: UIColor.redColor()],forState:.Selected)
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName!: UIColor.whiteColor()],forState:.normal)

(和4.)通过以编程方式设置图像并将渲染模式(imageWithRenderingMode :)更改为UIImageRenderingMode.AlwaysOriginal,可以实现不同状态的不同项目颜色,多色图标和不同项目颜色,这看起来如下这在所有视图控制器的第一个视图控制器类中):

var recentsItem = self.tabBarController!.tabBar.items![0] as UITabBarItem
var recentsItemImage = UIImage(named:"recents.png")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
var recentsItemImageSelected = UIImage(named: "recentsSelected.png")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
recentsItem.image = recentsItemImage
recentsItem.selectedImage = recentsItemImageSelected

我希望这有助于,如果您有以下任何问题,请随时问我.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐