通过IN添加时,UIBarButtonItem图标为白色,以编程方式添加时为黑色

时间:2010-08-07 20:36:57

标签: iphone cocoa-touch uikit uibarbuttonitem

当我通过Interface Builder向UIBarButtonItem添加图标时,图标显示为白色。当我以编程方式将相同的图标文件添加到另一个UIToolbar时,图标显示为黑色。为什么呢?

UIImage *image = [UIImage imageNamed:@"icon.png"];
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button setImage:image forState:UIControlStateNormal];
rootViewController.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:reloadButton] autorelease];

4 个答案:

答案 0 :(得分:6)

Jongsma所说的一切都是对的,你应该使用initWithImage:style:message。

下一个问题不是您创建UIBarButtonItem的方式,而是您分配它的位置。您可以使用UIBarButtonItemStylePlain创建它,它通常应该将图标的轮廓呈现为白色,但UIBavigationItem的RightBarButtonItem(就像左边一样)不允许使用UIBarButtonItemStylePlain。它隐式转换为UIBarButtonItemStyleBordered。在带边框的样式中,图标按“原样”呈现,黑色带有轻微的渐变。

我认为如果你想要一个有边框的barButton上的白色项目,你将不得不触摸图像本身。

答案 1 :(得分:6)

答案:如果您想要白色,请将图像颜色设为白色。

<强>详细信息:

UIBarButtonItems的行为略有不同,具体取决于您使用它们的方式。

添加到UIToolbar

initWithImage:style:target:action:创建“白色图标”(忽略图像颜色,不透明像素用作创建白色图像的蒙版)。
适用于borderedplain样式(但仅适用于UIToolbar)。

initWithCustomView:显示正常的彩色图像。

添加到UINavigationItem

initWithImage:style:target:action:创建彩色图片并将plain转换为bordered

答案 2 :(得分:0)

在您的代码中,您将UIButton设置为UIBarButtonItem的子视图。 UIBarButtonItem已经是一个按钮,所以你不应该添加另一个按钮作为子视图。

试试这个:

UIImage *image = [UIImage imageNamed:@"icon.png"];
rootViewController.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithImage:image] autorelease];

答案 3 :(得分:0)

有同样的问题。我注意到使用了@ 2X图像......