ios setTintColor和setSelectedImageTintColor不能一起正常工作

aiqt4smr  于 2023-03-31  发布在  iOS
关注(0)|答案(2)|浏览(115)

我正在尝试更改我的自定义标签栏的标签栏项目的图标颜色,
但是setSelectedImageTintColorsetTintColor不能一起工作。
如果编码顺序是

[[UITabBar appearance] setSelectedImageTintColor:[UIColor greenColor]];
[[UITabBar appearance] setTintColor:[UIColor redColor]];

则输出为

如果代码顺序是

[[UITabBar appearance] setTintColor:[UIColor redColor]];
[[UITabBar appearance] setSelectedImageTintColor:[UIColor greenColor]];

则输出为

我在didFinishLaunchingWithOptions方法中使用了以下代码,前两行工作正常,问题出在最后两行

//To set color for unselected tab bar item's title color
[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary  dictionaryWithObjectsAndKeys: [UIColor redColor], NSForegroundColorAttributeName, nil] forState:UIControlStateNormal];

//To set color for selected tab bar item's title color
[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor greenColor], NSForegroundColorAttributeName,nil] forState:UIControlStateSelected];

//To set color for unselected icons
[[UITabBar appearance] setTintColor:[UIColor redColor]];

//To set color for selected icons
[[UITabBar appearance] setSelectedImageTintColor:[UIColor greenColor]];

**注意-**我有单独的自定义标签栏类,但我不会更改自定义标签栏类中的图标颜色

谢谢期待。

klr1opcd

klr1opcd1#

首先,selectedImageTintColor从iOS 8.0开始就被弃用了。
我设法实现您想要的唯一方法是为选定和未选定状态设置单独的图像,并分别使用UITabBbarItemselectedImageimage属性。

**重要提示:**默认情况下,这两个图像属性都渲染为“模板”,这意味着它们是从源图像中的alpha值创建的,因此将从tabBar的tintColor获取它们的颜色。

为了防止这种情况,请提供带有UIImageRenderingModeAlwaysOriginal的图像。
因此,为了得到你想要的,你需要有两个版本的所有选项卡图像,一个红色(用于未选中状态)和一个绿色(用于选中状态),然后这样做:
示例(swift):

tabBarItem1.image = UIImage(named:"redHouse")?.imageWithRenderingMode(.AlwaysOriginal)
    tabBarItem1.selectedImage = UIImage(named:"greenHouse")?.imageWithRenderingMode(.AlwaysOriginal)

示例(目标-c):

[tabBarItem1 setImage:[[UIImage imageNamed:@"redHouse"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
    [tabBarItem2 setSelectedImage:[[UIImage imageNamed:@"greenHouse"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
8e2ybdfx

8e2ybdfx2#

Apple documentation说明您可以使用tintColor属性。

相关问题