返回
iOS - 解决设置导航栏按钮图片变色的问题
IOS
2023-12-17 06:42:47
今天在利用以下代码给导航栏按钮设置图片时,发现原本是黑色的切图显示成了蓝色:
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)
修改后,图片就可以正常显示了:
[图片]
希望这个解决方案对您有所帮助!