iOS tintAdjustmentMode プロパティ
Present UIAlertController 時、本ページ上の Image Assets(Render as template)の .tintColor 設定が無効になる問題
問題修正前後比較
同じく余計な説明はせず、比較図を直接示します。

左修正前 / 右修正後
左側のアイコンは、UIAlertControllerを表示しているときにtintColorの色設定が無効になることがわかります。さらに、表示しているウィンドウが閉じると色設定が元に戻り、正常に表示されます。
問題修正
まずは tintAdjustmentMode のプロパティ設定について紹介します。このプロパティは tintColor の表示モードを制御し、以下の3つの列挙型が設定可能です:
-
.Automatic :ビューの tintAdjustmentMode は親ビューの設定に従います
-
.Normal :デフォルトモード で、設定された tintColor を通常表示します
-
.Dimmed :tintColor を低彩度で暗い色(つまりグレー)に変更します。
上記の問題はバグではなく、システムの仕組みそのものです:
UIAlertControllerをPresentすると、本ページのRoot ViewControllerのViewのtintAdjustmentModeがDimmedに変更されます(正確には色設定が「無効」になるわけではなく、tintAdjustmentModeのモードが変わるだけです)
しかし、アイコンの色を一貫して保ちたい場合は、UIViewのtintColorDidChangeイベント内でtintAdjustmentModeを一定に設定するだけで良いです:
extension UIButton {
override func tintColorDidChange() {
self.tintAdjustmentMode = .normal // 常にnormalを維持する
}
}
extensionの例
終わり!
大した問題ではなく、直さなくても問題ありませんが、見た目が気になります。
実は、どのページでもUIAlertController、アクションシート、ポップオーバーを表示すると、そのページのviewのtintAdjustmentModeがグレーに変更されますが、私はこのページで初めて気づきました。
しばらく調べた結果、このプロパティに関係していることがわかり、設定したら私の小さな疑問が解決しました。
Post MediumからZMediumToMarkdownによってMarkdownに変換されました。



コメント