はじめに
iOS13からダークモードがiPhoneにも追加され、ユーザニーズからアプリ側でもダークモード対応を必要とされる場面が増えてきました。
一方でiOS12以前のOSをサポートする必要がある場合がほとんどかと思います。
「iOS12ではダークモードが利用できないので、ダークモードが導入できないのでは?」
と思う方がいる可能性を踏まえて、
本日は、今更ではありますが、旧OSをサポートしながらダークモード対応するための Color 定義について見ていきたいと思います。
Color Assetでダークモード時の色を定義
Xcode9より Color Asset 機能が追加されています。
エンジニアだけでなく、デザイナーさんがXcodeを触って色を確認する可能性も踏まえると、
Color Asset を使わない手はないでしょう。
( Color Asset が利用できる状況なら、恐らく最も手軽にダークモード対応が可能です。 )
Xcode11より、 Color Asset でダークモード対応できる機能が追加されました。
方法は簡単で下図のように、右メニュー > Appearances の設定を Any,Dark に変更するだけです。
( Light , Dark 以外にモードを設ける場合は Any,Light,Dark を選択してください。 )

これでダークモードの対応は完了です。
下記のように、 Color Asset で設定した名称で呼び出せば、端末のモードに従って色を設定できます。
1
| |
iOS12以前の旧OSではダークモードがありませんので、
UIColor(named: "mainBackgroundColor") を利用すると自動的に Any が採用されます。
コードでダークモード時の色を定義
さて、 Color Asset が利用できない場合は、どうすれば良いでしょうか。
この場合、ゴリゴリにコードで記述するしかないでしょう。
iOS13以上のアプリであれば、 UIColor に、
1
| |
というイニシャライザーが追加されているため、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
といった形で定義ができるでしょう。
これがiOS12以前も対応するとなると、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
のように条件分岐が必要になります。
まとめ
さて、如何でしたでしょうか?
案外、簡単にダークモード対応ができることがわかります。
ただし、コードで定義する場合は、色定義ファイルが膨大になることが予想されるため、
もう少し工夫が必要になることでしょう。
と言ったところで本日はここまで。
参考URL: