Iphone 我可以要一个有彩色图像的uibarbuttonite吗?

Iphone 我可以要一个有彩色图像的uibarbuttonite吗?,iphone,objective-c,uibarbuttonitem,Iphone,Objective C,Uibarbuttonitem,我有一个图像,我想显示在一个uibarbuttonite,但出于某种原因,它只显示它的轮廓,其余的都是白色的。如何让它实际显示图像 谢谢 更新:有关iOS 7+中提供的更简单的解决方案,请参阅 以下是我如何使用UIBarbuttonite的图像: UIImage *image = [UIImage imageNamed:@"buttonImage.png"]; UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; bu

我有一个图像,我想显示在一个uibarbuttonite,但出于某种原因,它只显示它的轮廓,其余的都是白色的。如何让它实际显示图像


谢谢

更新:有关iOS 7+中提供的更简单的解决方案,请参阅


以下是我如何使用UIBarbuttonite的图像:

UIImage *image = [UIImage imageNamed:@"buttonImage.png"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
button.bounds = CGRectMake( 0, 0, image.size.width, image.size.height );    
[button setImage:image forState:UIControlStateNormal];
[button addTarget:myTarget action:@selector(myAction) forControlEvents:UIControlEventTouchUpInside];    
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
…

没有。正如你在报纸上看到的那样

确定图标的外观后,请在创建图标时遵循以下准则:

使用PNG格式。 使用带有适当alpha的纯白色。 不要包含阴影。 使用抗锯齿。 如果决定添加斜角,请确保其为90°(为了帮助您完成此操作,请想象一个光源位于图标顶部)。 对于工具栏和导航栏图标,创建一个尺寸约为20 x 20像素的图标。 对于选项卡栏图标,创建一个尺寸约为30 x 30像素的图标

注意:为工具栏、导航栏和选项卡栏提供的图标用作遮罩,用于创建在应用程序中看到的图标。 无需创建全彩图标


还有其他iOS7+解决方案:

NSString *iconFilename = // ...
UIImage *image = 
    [[UIImage imageNamed:iconFilename] 
        imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIBarButtonItem *barButtonItem = 
    [[UIBarButtonItem alloc] initWithImage:image
                                     style:UIBarButtonItemStylePlain 
                                    target:self 
                                    action:@selector(onBarButtonItemTapped:)];
Swift 5:

let iconFilename: String = // ...
let image = UIImage(named: iconFilename)?.withRenderingMode(.alwaysOriginal)
let barButtonItem = UIBarButtonItem(image: image, 
                                    style: .plain, 
                                    target: self, 
                                    action: #selector(onBarButtonItemTapped(_:)))
从UIImage.h中提取:

。。。导航栏、选项卡栏、工具栏和分段控件自动将其前景图像视为模板。。。可以使用UIImageRenderingModeAlwaysTemplate强制始终将图像渲染为模板,也可以使用UIImageRenderingModeAlwaysOriginal强制始终将图像渲染为原始图像


还有一种方法根本不涉及编码

首先,将要放置在Assets.xcsets文档栏上的图像

在资源浏览器上选择图像

在右侧垂直工具栏上打开该图像的属性检查器

在“渲染为”上选择“原始图像”

即使在情节串连板上,按钮仍将继续使用着色颜色绘制,但在模拟器上运行时,将显示原始图像

图像的默认呈现模式因UI控件的不同而异。但是,如果在属性检查器上设置此参数,则可以强制使用特定的渲染模式来表示图像


如果您需要在不同的控制器上用不同的渲染模式表示相同的图像,那么MANIAK_dobrii的响应更合适。

在Swift 3中:

let iconname = // ...
let image = UIImage(named: iconname)?.withRenderingMode(.alwaysOriginal)
let barButtonItem = UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(self. onBarButtonItemTapped))
self.navigationItem.leftBarButtonItem = barButtonItem

如果要在按钮上显示标题,可能需要将setImage行更改为setBackgroundImage。如果没有,那么上面的代码可以正常工作。不要忘了
按钮。showsTouchWhenHighlighted=YES
,这样当点击按钮时,按钮会像标准UIBarButtonim一样发光。知道如何使图像像工具栏一样变白吗?请使用@MANIAK_dobrii的答案。不需要自定义视图,到目前为止,这是更好的答案。请尝试增加UIButton的高度以匹配工具栏的高度,而不是图像的高度。这对我来说很有效。@Apfelsaft-如果iOS 7在2009年存在,当被问到这个问题时,可能会是:)我已经编辑了被接受的答案以链接到这个答案。谢谢,这是非常干净的现象。这太棒了!这应该是答案。非常感谢。也适用于UIButton和多色图像!非常感谢。