【Swift4】UIBarButtonItemの画像の色が変になる時はRenderingModeを指定しよう【Objective-C】

2020年8月26日

UINavigationControllerなどのナビゲーションバーに画像付きのUIBarButtonItemでボタンをつけた時に色が変になる問題が発生します。iOS7以降「RenderingMode」というのを指定しないと「[UINavigationBar appearance].tintColor」などで指定しているtintColorの色に塗りつぶされ てしまいます。

Swift4

self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: UIImage(named: "hoge2.png")?.withRenderingMode(.alwaysOriginal),
                                                                 style: .plain,
                                                                 target: self,
                                                                 action: #selector(hoge));

Objective-C

self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:[[UIImage imageNamed:@"hoge.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]
                                                                              style:UIBarButtonItemStylePlain
                                                                             target:self
                                                                             action:@selector(hoge)];

UIImageのRenderingModeに「UIImageRenderingModeAlwaysOriginal」を指定することでちゃんと色が乗るようになります。