UINavigationBar中的彩色后退按钮

时间:2018-12-05 15:17:49

标签: ios swift

我在UINavigationController中有一个UINavigationbar。我试图将“后退”按钮设置为通过核心图形绘制的自定义图像。将图像放在UIImageView中时看起来不错,但是当我尝试将图像作为后退按钮放置时,它全部显示为一种颜色。我认为这与UINavigationBar的tintColor属性有关。

基本上,无论我做什么,我都无法在UIImage中显示2种颜色。这是我要设置为后退按钮的图像(只是红色圆圈,而不是黑色圆圈):

enter image description here

这是我的代码:

let image = Icons.backButton(with: CGSize(width: 28, height: 28))
self.navigationController?.navigationBar.backIndicatorImage = image
self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = image
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: UIBarButtonItem.Style.plain, target: nil, action: nil)

据我所知,当我将图像分配给后退按钮时,navigationBar将采用当前的tintColor并将其应用于整个图像。允许使用Alpha通道,但是所有纯色都将填充为浅色。所以现在我得到一个红色圆圈,没有白色箭头。我尝试将tintColor设置为UIColor.clear,但这使整个后退按钮变为透明/不可见。

是否有某种方法可以破解导航控制器,以便我可以使用一种以上的后退按钮来显示多种颜色?我知道我可以设置自定义UIView而不是使用navigationController,但最好不要这样做。

感谢您的帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

您需要将渲染模式设置为.alwaysOriginal,例如:

var backImage = UIImage(named: "back")
backImage = backImage?.withRenderingMode(.alwaysOriginal)
navigationController?.navigationBar.backIndicatorImage = backImage
navigationController?.navigationBar.backIndicatorTransitionMaskImage = backImage