ZhgChg.Li

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を表示しているときにtintColorの色設定が無効になることがわかります。さらに、表示しているウィンドウが閉じると色設定が元に戻り、正常に表示されます。

問題修正

まずは tintAdjustmentMode のプロパティ設定について紹介します。このプロパティは tintColor の表示モードを制御し、以下の3つの列挙型が設定可能です:

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

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

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

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

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

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

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

extensionの例

終わり!

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

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

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

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

GitHub で編集
この記事を改善
本記事は Medium で初公開
オリジナルを読む
この記事をシェア
リンクをコピー · SNS でシェア
ZhgChgLi
著者

ZhgChgLi

An iOS, web, and automation developer from Taiwan 🇹🇼 who also loves sharing, traveling, and writing.

コメント