63

我正在尝试将UIBarButtonItem包含 a添加UIImage到 a UIToolbar。图像一直被着色,我无法让它显示为原始彩色图像 - 我想要做的就是逐字显示图像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……也许这对我的问题并不重要,但我想我会提到它。

4

5 回答 5

173

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

而不是这样做:

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

做这个:

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

它有效!

就我而言,我已将导航栏拖到 IB 中的视图控制器上,并添加了 BarButtonItem。但不要在 IB 中为该项目提供图像。通过执行以下操作创建一个插座并为其分配 UIImage(如我们上面创建的):

[myCustomBarButtonItem setImage:image];

希望这对你有用。

于 2013-10-29T21:09:13.830 回答
11

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

于 2016-02-06T13:54:11.003 回答
9

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

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

更新的斯威夫特 3

let image : UIImage? = UIImage(named:"myImage.png")!.withRenderingMode(.alwaysOriginal)
于 2015-11-23T17:26:00.460 回答
0

接受的答案很好,但如果你把它放在UIBarButtonItem故事板或 xib 中,那么你可以:

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

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

在此处输入图像描述

于 2018-11-27T01:38:10.407 回答
-4

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

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

由于 imageWithRenderingMode: 是一种 iOS 7 方法,因此如果您尝试将其与较低版本一起使用,则会出现异常。

于 2014-03-29T21:27:33.453 回答