iOS UIBarButtonItem 的图片颜色问题
Photo by Brandon Wong / Unsplash
这两天在搞 iOS 项目,写写 UI,画画界面。今天遇到了一个之前没遇到过的问题,就是设置全局导航栏的返回按钮。这个好说,刷刷刷的搞定了。
顺便就贴一下代码吧,虽然这不是本题的重点。
- (void)viewDidLoad {
[super viewDidLoad];
self.interactivePopGestureRecognizer.delegate = (id<UIGestureRecognizerDelegate>)self;
}
- (void)popself {
[self popViewControllerAnimated:YES];
}
- (UIBarButtonItem *)createBackButton {
UIImage *backImage = [UIImage imageNamed:@"nav_back_black"];
UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithImage:backImage style:UIBarButtonItemStylePlain target:self action:@selector(popself)];
return item;
}
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
[super pushViewController:viewController animated:animated];
if (viewController.navigationItem.leftBarButtonItem == nil && [self.viewControllers count] > 1) {
viewController.navigationItem.leftBarButtonItem = [self createBackButton];
}
}
设置完之后,嗯,很好很强大。
等等??!
为什么颜色和图片原来的颜色不一样,变成了 iOS 原生的丑蓝?
调研了一下发现,原来给 UIBarButtonItem 设置图片的时候,想要保持图片原生颜色的话,需要告诉 UIImage 让它保持自身的颜色。不然就会受 tintColor 的影响。设置方法也很简单,就一行代码。
UIImage *backImage = [[UIImage imageNamed:@"nav_back_black"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
这样,再设置给 UIBarButtonItem 的话,就不受 tintColor 的影响了。
好想说废话啊。
自从换成了 Ghost 之后,写博客太方便了,随手打开 Chrome 就能写,写完就能看,爽死。