iOS tintAdjustmentMode 屬性

ZhgChgLi
ZRealm Dev.
Published in
Feb 6, 2019

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設定ㄧ致:

extension UIButton { 
override func tintColorDidChange() {
self.tintAdjustmentMode = .normal //永遠保持normal
}
}

extension example

結束!

不是什麼大問題,不改也沒差,但就是礙眼

其實每一個頁面遇到present UIAlertController、action sheet、popover…都會將本頁view的tintAdjustmentMode改為灰色,但我在這個頁面才發現

查找了一陣子資料才發現跟這個屬性有關係,設定之後就解決我的小疑惑.

有任何問題及指教歡迎與我聯絡

--

--

ZhgChgLi
ZRealm Dev.

探索世界、求知若渴、教學相長;更愛電影、美劇、西音、運動、生活. www.zhgchg.li