Custom background/transparent background on UIBarButtonItem?

末鹿安然 提交于 2019-11-29 01:52:24

If you want to have UIBarButtonItem everywhere in your application, what you can do is in your AppDelegate.m and in your application:didFinishLaunchingWithOptions: method, you can write

[[UIBarButtonItem appearance] setBackgroundImage:[[UIImage alloc] init] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

This will create an empty image, and it will set UIBarButtonItem's background to that image. With writing it into AppDelegate you will make sure everywhere you are using a UIBarButtonitem it will have transparent background, even your back buttons.

I don't think you can make it transparent just by setting some sort of property (but I might be wrong).

Look at the UIBarButtonItem documentation. There are init methods that will take a custom view or an image and create a UIBarButtonItem from it. So create a view or an image with the appearance you want and use that. One thing you might want to try is to create a UIButton the way you want it to look, and then do [[UIBarButtonItem alloc] initWithCustomView:button];

Another solution is to sent the tintColor property of your UINavigationBar to whatever color you want, and the button will take on that color.

AtomRiot

You can also create a standard UIButton and set its style to custom and set your image or background color for that button and drag it onto the UINavigationBar.

You could also use the Appearance proxy to set the backgroundImage property of the UIBarButtonItems to your own transparent image:

UIImage *buttonImage = [[UIImage imageNamed:@"barButton"]  resizableImageWithCapInsets:UIEdgeInsetsMake(12, 8, 12, 8)];
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setBackgroundImage:buttonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setBackButtonBackgroundImage:buttonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

Note that I think there's a bug when setting the insets to certain values (11?13?) so if you're having issues, try change the insets as you may have stumbled on that bug.

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