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

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值