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 就能写,写完就能看,爽死。