文章

iOS tintAdjustmentMode 属性详解|解决 UIAlertController 导致 tintColor 失效问题

iOS 开发者遇到 UIAlertController 呈现时 Image Assets tintColor 失效,透过调整 tintAdjustmentMode 属性保持 icon 颜色一致,避免系统自动切换为灰色模式,提升 UI 稳定性与一致性。

iOS tintAdjustmentMode 属性详解|解决 UIAlertController 导致 tintColor 失效问题

基于 SEO 考量,本文标题与描述经 AI 调整,原始版本请参考内文。

文章目录


iOS tintAdjustmentMode 属性

Present UIAlertController 时本页上的 Image Assets (Render as template) .tintColor 设定失效问题

问题修正前后比较

ㄧ样不啰唆解释,直接上比较图.

左修正前/右修正后

左修正前/右修正后

可以看到左方ICON图在有Present UIAlertController时tintColor颜色设定失效,另外当Present的视窗关闭后就会恢复颜色设定显示正常.

问题修正

首先介绍一下 tintAdjustmentMode 的属性设置,此属性控制了 tintColor 的显示模式,此属性有三个枚举可设定:

  1. .Automatic :视图的 tintAdjustmentMode 与包覆的父视图设定一致

  2. .Normal预设模式 ,正常显示设定的 tintColor

  3. .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改为灰色,但我在这个页面才发现

查找了一阵子资料才发现跟这个属性有关系,设定之后就解决我的小疑惑.

有任何问题及指教欢迎 与我联络


🍺 Buy me a beer on PayPal

👉👉👉 Follow Me On Medium! (1,053+ Followers) 👈👈👈

本文首次发表于 Medium (点击查看原始版本),由 ZMediumToMarkdown 提供自动转换与同步技术。

Improve this page on Github.

本文由作者以 CC BY 4.0 授权。