使用白色箭头图片设置UINavigationBar的leftBarButtonItem,但显示为蓝色

来源:互联网 发布:网络言论自由的例子 编辑:程序博客网 时间:2024/05/21 10:27

1.问题描述

1.1.运行环境

Xcode版本:7.3.1
Simulator版本:8.4 & 9.3

1.2.背景

在一个项目中,导航栏的背景色为蓝色,导航栏的返回按钮为白色。然后产品化提供了蓝色的rgb数值和白色返回按钮的切图。
因为直接设置导航栏的背景色有半透明效果,所以便创建了一个纯色图片设置了导航栏的背景图片。

[self.navigationController.navigationBar setBackgroundImage:colorImage forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];

其中colorImage为纯色图片。

1.3.问题

但是运行之后发现,返回按钮的图片明明是白色的,但显示出来确成了蓝色的。

2.解决方法

2.1.思路

首先通过修改图片名称,排除了存在同名资源文件的可能。
然后修改了导航栏的底色,发现返回按钮的颜色是随着导航栏的底色变化的。
最后去看导航按钮的添加代码:

UIBarButtonItem *item = [[UIBarButtonItem alloc]initWithImage:[UIImage imageNamed:@"GDNavBar_Back"] style:UIBarButtonItemStylePlain target:self action:@selector(didBackButton)];

此处加载图片使用的是类似title的前景图片。类比一下title,UIBarButtonItem的title显示时是具有透明效果的,所以可能该前景图片也有透明效果。
但是UIBarButtonItem又不存在backgroundImage属性,所以只能通过customView进行展示。

UIButton* btn = [UIButton buttonWithType:UIButtonTypeCustom];btn.frame = CGRectMake(0, 0, 45, 40);[btn setImage:[UIImage imageNamed:@"GDNavBar_Back"] forState:UIControlStateNormal];[btn addTarget:self action:@selector(backToPrev) forControlEvents:UIControlEventTouchUpInside];self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:btn];

使用该办法后,返回图片显示正常。
2.2.结论
使用UIBarButtonItem的customView属性定制按钮。

3.原因

如上所述,尽量使用customView来定制UIBarButtonItem。

0 0
原创粉丝点击