[SwiftUI] Darkモードを無視する

SwiftUI2021

     
⌛️ < 1 min.

Darkモードに対応しない設定 を説明します。

環境&対象

以下の環境で動作確認を行なっています。

  • macOS14.5
  • Xcode 15.4
  • iOS 17.5
  • Swift 5.9

Darkモード

macOS/ iOS では ユーザーが Appearance を選択できるという機能があります。

AppearanceSetting

Appearance としては、基本的に2つの選択肢があり、その1つが Dark モードです。
もう1つは、Light モードです。

# 自動で切り替えるモードも用意されています。


参考
supporting_dark_mode_in_your_interfaceApple Developer Documentation

Darkモード対応しない

Apple は、Dark モードに 対応することを 推奨していますが、さまざまな理由等で対応しない/できないケースもあります。

Apple が提供する AppKit/SwiftUI の個別パーツは、パーツとしては個別に対応してしまいます。
つまり、モードに応じて適切な表示に自動で切り替わります。

Apple が提供する機能をそのまま組み合わせたアプリであれば そのまま Dark モード対応として完結することもありますが、
View をカスタムしていると、Dark モード対応として、細かい対応が必要になるケースもあります。

そのようなケースでも、Apple が提供するパーツそのままの箇所は、自動で切り替わってしまうため アプリ全体で見ると表示が破綻してしまうケースがあります。

Dark モード対応するのが より良いのでしょうが すぐに 対応できない時には、OS の Appearance が変更されても 表示を切り替えない ということをした方が良いです。

アプリの Info.plist に以下の設定を追加すると、OS として Appearance が変更されても、アプリはその変更を無視します。

<key>NSRequiresAquaSystemAppearance</key>
<string>true</string>

対応が完了したら・・・

Dark モード対応できたならば、以下のように、false に設定すると、OS の Appearance が変更されたときに、アプリはその変更を無視しなくなります。

<key>NSRequiresAquaSystemAppearance</key>
<string>false</string>

確認していませんが、Key を削除してしまっても良いと思われます。

おまけ:iOS対応

iOS の場合には、異なるキーと値が必要です。

キー:UIUserInterfaceStyle

値(String):Light

まとめ

Darkモード対応しない設定

Darkモード対応しない設定
  • Info.plist に (キー: “NSRequiresAquaSystemAppearance”, 値: “true”) を追加する
  • アプリ側で ダークモードに対応できたら、”false” にする。

説明は以上です。
不明な点やおかしな点ありましたら、こちらまで。

SwiftUI おすすめ本

SwiftUI を理解するには、以下の本がおすすめです。

SwiftUI ViewMatery

SwiftUI で開発していくときに、ViewやLayoutのための適切なmodifierを探すのが大変です。
英語での説明になってしまいますが、以下の”SwiftUI Views Mastery Bundle”という本がビジュアル的に確認して探せるので、便利です。

英語ではありますが、1ページに コードと画面が並んでいるので、非常にわかりやすいです。

View に適用できる modifier もわかりやすく説明されているので、ビューの理解だけではなく、どのような装飾ができるかも簡単にわかります。

超便利です

SwiftUIViewsMastery

販売元のページは、こちらです。

SwiftUI 徹底入門

# SwiftUI は、毎年大きく改善されていますので、少し古くなってしまいましたが、いまでも 定番本です。

Swift学習におすすめの本

詳解Swift

Swift の学習には、詳解 Swift という書籍が、おすすめです。

著者は、Swift の初期から書籍を出していますし、Swift の前に主力言語だった Objective-C という言語についても同様の書籍を出しています。

最新版を購入するのがおすすめです。

現時点では、上記の Swift 5 に対応した第5版が最新版です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です