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

时间:2013-02-26 10:07:43

标签: iphone ios objective-c ipad

我使用以下代码为UITabBarItem

创建图片
self.tabBarItem.image = [UIImage imageNamed:@"tab_img.png"];

此tab_img.png由黑色,白色和清晰的颜色组成。但在应用程序中,黑白图像的所有部分都变为灰色。我怎么能把这个灰色变成白色?

this is image that I use

enter image description here

7 个答案:

答案 0 :(得分:34)

在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并添加初始化的代码。

答案 1 :(得分:10)

设置选定和未选择的图像。

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

答案 2 :(得分:6)

如果您使用的是图片资源,只需将图片的“渲染为”字段(选定图像和未选择的图像)设置为“原始图像”(Convert .Net Core to .Net Framework

然后在您的xib中设置Tab Bar项目中的“Image”和“Selected Image”字段 (example

答案 3 :(得分:3)

UITabBarItems的图像应该只是alpha通道! 不透明的部分只会显示为灰色(如果选中,则为蓝色)!

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

答案 4 :(得分:0)

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

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

设置了它

答案 5 :(得分:0)

Only Way是转到IB(界面构建器)并在View Controller中选择UITabBarItem并转到“文件检查器”向下滚动,你会看到Global Tint她可以将它设置为没有颜色或任何颜色你希望它对所选图像生效。

根据以下代码是关注

setFinishedSelectedImage: withFinishedUnselectedImage:;

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

[yourCustomTabBarItem setSelectedImage:---];

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

答案 6 :(得分:0)

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

 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)
    }