返回

iOS - 解决设置导航栏按钮图片变色的问题

IOS

今天在利用以下代码给导航栏按钮设置图片时,发现原本是黑色的切图显示成了蓝色:

let navigationBarAppearace = UINavigationBar.appearance()
navigationBarAppearace.tintColor = UIColor.black
navigationBarAppearace.backIndicatorImage = UIImage(named: "back_icon")
navigationBarAppearace.backIndicatorTransitionMaskImage = UIImage(named: "back_icon")

得到的显示效果:

[图片]

解决方案
在 iOS 7 的时候,UIImage 多了一个 renderingMode 属性,它决定了图片的绘制模式。默认情况下,这个属性的值是 UIImageRenderingMode.Automatic,在这种模式下,图片会根据当前的环境自动选择绘制模式。

而在 iOS 8 中,UIImageRenderingMode.Automatic 的行为发生了改变,它不再根据环境自动选择绘制模式,而是根据图片的内容来选择。如果图片的内容是单色的,那么它就会使用 UIImageRenderingMode.AlwaysTemplate 模式进行绘制,这会导致图片变成当前 tintColor 的颜色。

因此,要解决这个问题,我们需要显式地将图片的 renderingMode 属性设置为 UIImageRenderingMode.AlwaysOriginal,这样图片就不会被 tintColor 影响。

修改后的代码如下:

let navigationBarAppearace = UINavigationBar.appearance()
navigationBarAppearace.tintColor = UIColor.black
navigationBarAppearace.backIndicatorImage = UIImage(named: "back_icon")?.withRenderingMode(.alwaysOriginal)
navigationBarAppearace.backIndicatorTransitionMaskImage = UIImage(named: "back_icon")?.withRenderingMode(.alwaysOriginal)

修改后,图片就可以正常显示了:

[图片]

希望这个解决方案对您有所帮助!