UIBarButtonItem icon white when added via IB, black when added programmatically

南笙酒味 提交于 2019-11-30 07:24:54

Everything Jongsma said is right, you should use the initWithImage:style: message.

The next problem is not the way you create the UIBarButtonItem, but the place you assign it. You create it with UIBarButtonItemStylePlain, which should normally render the icon's outline in white, but the rightBarButtonItem of a UINavigationItem (just like the left) is not allowed the UIBarButtonItemStylePlain. It's implicitly converted to UIBarButtonItemStyleBordered. In the bordered style the icon is rendered 'as is', which is black with a slight gradient.

I think if you want the item in white on a bordered barButton, you'll have to touch the image itself.

Answer: If you want it white, color your image white.

Details:

UIBarButtonItems behave a little differently depending on how you use them.

When adding to a UIToolbar:

initWithImage:style:target:action: creates "white icons" (image color is ignored, opaque pixels are used as a mask to create a white image).
This is true for bordered and plain styles (but on UIToolbar only).

initWithCustomView: displays normal colored image.

When adding to a UINavigationItem:

initWithImage:style:target:action: creates colored images and converts plain to bordered.

In your code, you are setting an UIButton as the subview of an UIBarButtonItem. UIBarButtonItem is already a button, so you shouldn't add another button as the subview.

Try this:

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

Had the same problem. I Noted that the @2X images were used instead...

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!