iOS tintAdjustmentMode 属性详解|解决 UIAlertController 导致 tintColor 失效问题
iOS 开发者遇到 UIAlertController 呈现时 Image Assets tintColor 失效,透过调整 tintAdjustmentMode 属性保持 icon 颜色一致,避免系统自动切换为灰色模式,提升 UI 稳定性与一致性。
Click here to view the English version of this article.
點擊這裡查看本文章正體中文版本。
基于 SEO 考量,本文标题与描述经 AI 调整,原始版本请参考内文。
iOS tintAdjustmentMode 属性
Present UIAlertController 时本页上的 Image Assets (Render as template) .tintColor 设定失效问题
问题修正前后比较
ㄧ样不啰唆解释,直接上比较图.
左修正前/右修正后
可以看到左方ICON图在有Present UIAlertController时tintColor颜色设定失效,另外当Present的视窗关闭后就会恢复颜色设定显示正常.
问题修正
首先介绍一下 tintAdjustmentMode 的属性设置,此属性控制了 tintColor 的显示模式,此属性有三个枚举可设定:
.Automatic :视图的 tintAdjustmentMode 与包覆的父视图设定一致
.Normal : 预设模式 ,正常显示设定的 tintColor
.Dimmed :将 tintColor 改为低饱和度、暗淡的颜色(就是灰色啦!)
上述问题不是什么BUG而是系统本身机制即是如此:
在Present UIAlertController时会将本页Root ViewController上View的 tintAdjustmentMode 改为 Dimmed (所以准确来说也不叫颜色设定「失效」,只是 tintAdjustmentMode 模式更改)
但有时我们希望ICON颜色能保持ㄧ致则只需在UIView中tintColorDidChange事件保持tintAdjustmentMode设定ㄧ致:
1
2
3
4
5
extension UIButton {
override func tintColorDidChange() {
self.tintAdjustmentMode = .normal //永远保持normal
}
}
extension example
结束!
不是什么大问题,不改也没差,但就是碍眼
其实每一个页面遇到present UIAlertController、action sheet、popover…都会将本页view的tintAdjustmentMode改为灰色,但我在这个页面才发现
查找了一阵子资料才发现跟这个属性有关系,设定之后就解决我的小疑惑.
有任何问题及指教欢迎 与我联络 。
本文首次发表于 Medium (点击查看原始版本),由 ZMediumToMarkdown 提供自动转换与同步技术。