我有一张想在 UIBarButtonItem 上显示的图像,但由于某种原因,它只显示了它的轮廓,其余的都是白色的。我怎样才能让它实际显示图像?
谢谢!
我有一张想在 UIBarButtonItem 上显示的图像,但由于某种原因,它只显示了它的轮廓,其余的都是白色的。我怎样才能让它实际显示图像?
谢谢!
还有其他 iOS7+ 解决方案:
NSString *iconFilename = // ...
UIImage *image =
[[UIImage imageNamed:iconFilename]
imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIBarButtonItem *barButtonItem =
[[UIBarButtonItem alloc] initWithImage:image
style:UIBarButtonItemStylePlain
target:self
action:@selector(onBarButtonItemTapped:)];
斯威夫特 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 强制您的图像始终呈现为原件。
更新:请参阅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];
…
在斯威夫特 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
没有。正如您在人机界面指南中所读到的那样
确定图标的外观后,请在创建图标时遵循以下准则:
使用 PNG 格式。使用带有适当 alpha 的纯白色。不包括投影。使用抗锯齿。如果您决定添加一个斜角,请确保它是 90°(为了帮助您做到这一点,想象一个位于图标顶部的光源)。对于工具栏和导航栏图标,创建一个大小约为 20 x 20 像素的图标。对于标签栏图标,创建一个大小约为 30 x 30 像素的图标。
注意:您为工具栏、导航栏和标签栏提供的图标用作掩码来创建您在应用程序中看到的图标。没有必要创建全彩图标。