使用UIImage的UIBarButtonItem始终着色iOS 7

我试图添加一个UIBarButtonItem包含UIImageUIToolbar 。 图像不断被着色,我不能把它显示为原来的彩色图像 – 我想要做的就是在UIBarButtonItem逐字显示图像! 我按照iOS 7转换指南中的说明将图像呈现模式设置为UIImageRenderingModeAlwaysOriginal

 UIImage *image = [UIImage imageNamed:@"myImage.png"]; image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; UIBarButtonItem *ratingImage = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStyleBordered target:nil action:nil]; [toolbar setItems:[NSArray arrayWithObjects:ratingImage, nil] animated:YES]; 

有一件事要注意的是,我的应用程序的主UIWindow加载tintColor的时候正确加载…也许这不是重要的问题,但我想我会提到它。

我花了一个晚上试图弄清楚这一点。 你非常接近解决scheme。 诀窍是用渲染模式实例化UIImage。

而不是做:

  UIImage *image = [UIImage imageNamed:@"myImage.png"]; image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 

做这个:

  UIImage *image = [[UIImage imageNamed:@"myImage.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 

它的工作原理!

在我的情况下,我已经拖动导航栏到我在IB的viewcontroller,并添加BarButtonItem。 但是不要在IB中提供该图像。 做一个sockets,并为其分配UIImage(就像我们上面创build的那样):

 [myCustomBarButtonItem setImage:image]; 

希望这对你有用。

对于Swift 2.1+,它看起来像这样:

 let image : UIImage? = UIImage(named:"myImage.png")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal) 

更新Swift 3

 let image : UIImage? = UIImage(named:"myImage.png")!.withRenderingMode(.alwaysOriginal) 

UIImageRenderingModeAlwaysOriginal也可以通过在XCode的Assets.xcassets“文件夹”中select图像并将“渲染为”下拉菜单设置为“原始图像”来设置。

如果您希望它适用于版本低于v7的iOS版本,则可能需要执行以下操作:

 UIImage *image = [UIImage imageNamed:@"myImage.png"]; @try { image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; } @catch (NSException *exception) { } 

由于imageWithRenderingMode:是一个iOS 7方法,如果您尝试使用较小的版本,则会发生exception。