带UIImage的UIBarButtonItem始终着色iOS 7

时间:2013-10-15 02:18:20

标签: objective-c ios7 uibarbuttonitem uitoolbar

我正在尝试将包含UIBarButtonItem的{​​{1}}添加到UIImage。图像不断被着色,我无法将其显示为原始彩色图像 - 我想要做的就是在UIToolbar中逐字显示图像!我按照iOS 7过渡指南中的说明将图像渲染模式设置为UIBarButtonItem

UIImageRenderingModeAlwaysOriginal

有一点需要注意的是,当我加载时,我为我的应用程序的主UIWindow设置了tintColor ...也许这对我的问题并不重要,但我想我会提到它。

4 个答案:

答案 0 :(得分:173)

我花了一个晚上试图解决这个问题。你非常接近解决方案。 诀窍是使用渲染模式实例化UIImage。

而不是:

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

这样做:

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

它有效!

在我的情况下,我将导航栏拖到IB中的viewcontroller,并添加了BarButtonItem。但是不要在IB中提供项目图像。做一个出口并通过这样做为它分配UIImage(就像我们在上面创建的那样):

[myCustomBarButtonItem setImage:image];

希望这适合你。

答案 1 :(得分:10)

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

答案 2 :(得分:0)

可接受的答案很好,但是如果您将UIBarButtonItem放在情节提要或xib中,则可以:

  • 转到图像所在的资产目录
  • 选择图像
  • 转到属性检查器(cmd-opt-4)
  • 将“渲染为”设置为“原始图像”

仅当您要显示此图像的所有个实例而不着色时,才执行此操作。

enter image description here

答案 3 :(得分:-4)

如果您希望它适用于低于v7的iOS版本,您可能需要这样:

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

由于imageWithRenderingMode:是一个iOS 7方法,如果您尝试使用较小版本,则会出现异常。