記事

iOS tintAdjustmentMode|UIAlertControllerでImage Assetsの.tintColor設定問題を解決

UIAlertController表示時にImage Assetsの.tintColorが反映されない問題を抱えるiOS開発者向けに、tintAdjustmentMode属性の活用法を解説し、確実に色を適用する方法を紹介します。

iOS tintAdjustmentMode|UIAlertControllerでImage Assetsの.tintColor設定問題を解決

本記事は AI による翻訳をもとに作成されています。表現が不自然な箇所がありましたら、ぜひコメントでお知らせください。

記事一覧


iOS tintAdjustmentMode プロパティ

Present UIAlertController 時本頁上的 Image Assets (Render as template) .tintColor 設定失效問題

UIAlertControllerを表示するとき、本ページのImage Assets(テンプレートレンダー)のtintColor設定が無効になる問題

問題修正前後の比較

同じく無駄な説明はせず、比較画像を直接表示します。

左修正前/右修正後

左側が修正前 / 右側が修正後

左側のアイコンはUIAlertControllerを表示しているときにtintColorの色設定が無効になっているのが確認できます。なお、表示中のウィンドウを閉じると色設定が正常に戻ります。

問題修正

まず tintAdjustmentMode のプロパティ設定について説明します。このプロパティは tintColor の表示モードを制御し、以下の3つの列挙値を設定できます:

  1. .Automatic :ビューの tintAdjustmentMode は親ビューの設定に従います

  2. .Normalデフォルトモード で、設定された tintColor を通常通り表示します

  3. .DimmedtintColor を低彩度の暗い色(つまりグレー)に変更します。

上記の問題はバグではなく、システムの仕組みそのものです:

UIAlertControllerを表示すると、本ページのRoot ViewControllerのViewのtintAdjustmentModeDimmedに変更されます(つまり、正確には色の設定が「無効」になるのではなく、tintAdjustmentModeのモードが変更されるだけです)

しかし、アイコンの色を一貫して保ちたい場合は、UIViewのtintColorDidChangeイベント内でtintAdjustmentModeを一定に設定するだけで十分です:

1
2
3
4
5
extension UIButton { 
   override func tintColorDidChange() {
        self.tintAdjustmentMode = .normal // 常にnormalを維持する
    }
}

extensionの例

終わり!

大した問題ではなく、直さなくても問題ありませんが、見た目が気になります。

実は、どのページでもUIAlertController、アクションシート、ポップオーバーを表示すると、そのページのviewのtintAdjustmentModeがグレーに変更されますが、私はこのページで初めて気づきました。

しばらく調べた結果、このプロパティに関係があることがわかり、設定したら私の小さな疑問が解決しました。

ご質問やご意見がございましたら、こちらからご連絡ください

Post MediumからZMediumToMarkdownによって変換されました。


🍺 Buy me a beer on PayPal

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

本記事は Medium にて初公開されました(こちらからオリジナル版を確認)。ZMediumToMarkdown による自動変換・同期技術を使用しています。

Improve this page on Github.

本記事は著者により CC BY 4.0 に基づき公開されています。