UITabBarItem 图像颜色为灰色,而原始图像为白色

Posted

技术标签:

【中文标题】UITabBarItem 图像颜色为灰色,而原始图像为白色【英文标题】:UITabBarItem image color is grey while original image is white 【发布时间】:2013-02-26 10:07:42 【问题描述】:

我使用以下代码为我的UITabBarItem 创建图像

self.tabBarItem.image = [UIImage imageNamed:@"tab_img.png"];

此 tab_img.png 由黑色、白色和透明色组成。但是在应用程序中,黑白图像的所有部分都变成了灰色。我怎样才能把这个灰色变成白色?

【问题讨论】:

可以在这里添加图片吗? 我已经添加了这个主页图片。 【参考方案1】:

ios7 中,如果你使用 IB,你可以继承 UITabBarController 然后添加:

+ (void)initialize

    //the color for the text for unselected tabs
    [UITabBarItem.appearance setTitleTextAttributes:@NSForegroundColorAttributeName : [UIColor redColor] forState:UIControlStateNormal];

    //the color for selected icon
    [[UITabBar appearance] setSelectedImageTintColor:[UIColor whiteColor]];    


- (void)viewDidLoad

    [super viewDidLoad];

    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) 
        for (UITabBarItem *tbi in self.tabBar.items) 
            tbi.image = [tbi.image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
        
    

如果您手动创建项目,则必须在每个图标上设置 UIImageRenderingModeAlwaysOriginal 并从初始化添加代码。

【讨论】:

所选项目的文本似乎也受到第一行的影响。我必须添加: [UITabBarItem.appearance setTitleTextAttributes:@NSForegroundColorAttributeName : [UIColor whiteColor] forState:UIControlStateSelected];使所选项目文本正确。 setSelectedImageTintColor: 已从 iOS8 中弃用,将其替换为 setTintColor: 谢谢...只是一个补充:还应该设置 tbi.selectedImage = [tbi.selectedImage imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; Swift 版本:self.tabBar.items?.forEach( tbi in tbi.image = tbi.image?.withRenderingMode(.alwaysOriginal); tbi.selectedImage = tbi.selectedImage?.withRenderingMode(.alwaysOriginal); ); p.s.我知道 Swift 不需要逗号,但由于这里没有换行符,所以我放了逗号【参考方案2】:

如果您正在使用图像资源,只需将图像(选定和未选定图像)的“渲染为”字段设置为“原始图像”(example)

然后在您的 xib 中设置标签栏项目上的“图像”和“选定图像”字段 (example)

【讨论】:

谢谢,你也拯救了我的一天。 我喜欢这个主意,但复制图像不是要走的路。【参考方案3】:

设置选中和未选中的图片。

[self.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"mehr_icon"] withFinishedUnselectedImage:[UIImage imageNamed:@"mehr_icon"]];

【讨论】:

该方法在 iOS 7 中已弃用,在 iOS 7 或更高版本中使用@Cornel Damian 方法。 就是这样,tks @fibnochi【参考方案4】:

UITabBarItems 的图像只能是 Alpha 通道! 但是,不透明部分将仅显示为灰色(如果选中则为蓝色)!

看看:http://devinsheaven.com/creating-uitabbar-uitoolbar-icons-in-adobe-illustrator/

【讨论】:

UITabBarItems 的图像可以是白色而不是灰色吗? 不适用于 iOS 7+。你可以使用- imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal【参考方案5】:

我曾经遇到过同样的问题,我只使用带有白色和 alpha 的图像image

我用self.tabBarItem.image = [UIImage imageNamed:@"Liste"];设置它

【讨论】:

改变 [UIImage imageNamed:@"tab_img.png"];改变 [UIImage imageNamed:@"tab_img"];没用没用【参考方案6】:

唯一的方法是转到 IB(界面生成器)并在您的视图控制器中选择 UITabBarItem,然后转到“文件检查器”向下滚动,您将看到 Global Tint,您可以将其设置为无颜色或您可以设置的任何颜色希望它对所选图像生效。

关注以下代码

setFinishedSelectedImage: withFinishedUnselectedImage:;

这在 iOS 7 中不再可用,我们可以使用

[yourCustomTabBarItem setSelectedImage:---];

但这也会影响此全局色调颜色。

【讨论】:

【参考方案7】:

对我来说最好的方法是改变图像颜色。

 func imageWithColor(_ color: UIColor) -> UIImage? 
        UIGraphicsBeginImageContextWithOptions(size, false, scale)
        let context = UIGraphicsGetCurrentContext()!
        context.translateBy(x: 0, y: size.height)
        context.scaleBy(x: 1.0, y: -1.0)
        context.setBlendMode(.normal)

        let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
        context.clip(to: rect, mask: cgImage!)

        color.setFill()
        context.fill(rect)

        let newImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        newImage.accessibilityIdentifier = accessibilityIdentifier
        return newImage
    

然后,您可以更新 tabBarItem 的属性,例如 image 和 selectedImage:

 func setupColorAttributes(to item: UITabBarItem) 
        item.image = item.image?.imageWithColor(.white)?.withRenderingMode(.alwaysOriginal)
        item.selectedImage = item.image?.imageWithColor(.highLight)?.withRenderingMode(.alwaysOriginal)
    

【讨论】:

以上是关于UITabBarItem 图像颜色为灰色,而原始图像为白色的主要内容,如果未能解决你的问题,请参考以下文章

当图像是 UITabBar 的选择时使用原始图像颜色的优雅方式

UITabbarItem : - 下载的图像不会显示在选项卡项中。

如何重新创建 UITabBarItem 图像过滤器?

UITabbarItem BadgeValue 文本颜色

如何在 UITabBarItem 上设置不同的未选择图像和文本颜色

更改 UITabBarItem 图像的颜色