我可以使用彩色图像的UIBarButtonItem吗?

Dev*_*Dev 34 iphone objective-c uibarbuttonitem

我有一个想要在UIBarButtonItem上显示的图像,但由于某种原因它只显示它的轮廓,其余的都是白色的.我怎么能让它实际显示图像?

谢谢!

amr*_*rox 62

更新:请参阅MANIAK_dobrii的答案以获得更简单的解决方案,可在iOS 7+中找到.


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

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];
…
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记`button.showsTouchWhenHighlighted = YES`,这样按钮会像标准的UIBarButtonItem一样点亮. (3认同)
  • 使用@MANIAK_dobrii的答案.不需要自定义视图,到目前为止更好的答案. (3认同)

MAN*_*rii 58

还有其他iOS7 +解决方案:

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

从UIImage.h中提取:

...导航栏,标签栏,工具栏和分段控件会自动将其前景图像视为模板...您可以使用UIImageRenderingModeAlwaysTemplate强制您的图像始终呈现为模板或UIImageRenderingModeAlwaysOriginal以强制您的图像始终呈现为原创.


Fel*_*rri 39

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

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

在资源浏览器上选择图像.

选择图像

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

属性检查器

在"渲染为"上选择"原始图像".

原始图像

即使在故事板上,按钮仍将使用色调颜色进行绘制,当在模拟器上运行时,将显示原始图像.

模拟器

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

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


Kap*_*ain 10

在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
Run Code Online (Sandbox Code Playgroud)


bpa*_*apa 7

不.您可以阅读人机界面指南

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

使用PNG格式.使用纯白色和适当的alpha.不要包含阴影.使用抗锯齿.如果您决定添加斜角,请确保它是90°(为了帮助您这样做,想象一下位于图标顶部的光源).对于工具栏和导航栏图标,请创建一个大约20 x 20像素的图标.对于标签栏图标,请创建一个大约30 x 30像素的图标.

注意:您为工具栏,导航栏和标签栏提供的图标将用作掩码,以创建您在应用程序中看到的图标.没有必要创建一个全彩图标.