UINavigationBar 中的多色后退按钮
Posted
技术标签:
【中文标题】UINavigationBar 中的多色后退按钮【英文标题】:Multi-Colored back button in UINavigationBar 【发布时间】:2018-12-05 15:17:49 【问题描述】:我在 UINavigationController 中有一个 UINavigationbar。我正在尝试将后退按钮设置为我通过核心图形绘制的自定义图像。放置在 UIImageView 中的图像看起来不错,但是当我尝试将图像放置为我的后退按钮时,它显示为一种颜色。我认为这与 UINavigationBar 的 tintColor 属性有关。
基本上,无论我做什么,我都无法在 UIImage 中显示 2 种颜色。这是我试图设置为我的后退按钮的图像(只是红色圆圈,而不是周围的黑色):
这是我的代码:
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,但这会使整个后退按钮清晰/不可见。
有什么方法可以破解导航控制器,这样我就可以拥有超过 1 种颜色的后退按钮?我知道我可以设置一个自定义 UIView 而不是使用 navigationController,但我不想这样做。
感谢任何帮助。谢谢!
【问题讨论】:
【参考方案1】:需要将渲染模式设置为.alwaysOriginal
例如:
var backImage = UIImage(named: "back")
backImage = backImage?.withRenderingMode(.alwaysOriginal)
navigationController?.navigationBar.backIndicatorImage = backImage
navigationController?.navigationBar.backIndicatorTransitionMaskImage = backImage
【讨论】:
以上是关于UINavigationBar 中的多色后退按钮的主要内容,如果未能解决你的问题,请参考以下文章
带有 UINavigationController 的独立 UINavigationBar 中的后退按钮