iOSの開発を始めた当初、非常にこの問題に関して困惑してしまったかつ、解決方法がすぐに探せなかったので、ログとして残しておこうと思います。
Xcode: 12.5.1
Swift: 5.4.2
実際に問題の挙動が発生した状態を見ながら、説明をしていきます。
XcodeでCreate New Projectから新しいプロジェクトを作成し、何も変更していない状態です。
ビルドする前に現在のMain.storyboard
を見てみると以下のようになっています。
プロジェクトを作成した時に作成されたViewControllerのViewにフォーカスが当たっている状態です。
右側のユーティリティエリアをみるとViewのBackground
プロパティにはSystem Background Color
が選択されているのが分かります。
この状態でSimulatorでビルドをしてみると、Storyboardで確認した時同様の白い画面が表示されます。
しかし実機でビルドをして立ち上げると以下のようになります
こちらの記事で取り上げられている通り、
ユーザーがダークモードをオンにすると、iOS 13 SDKで構築されたすべてのアプリがダークモードで実行されます。 ダークモードに最適化する方法を学びiOS 13やiPadOSの最新ベータ版を実行しているデバイスでアプリをテストしましょう。ダークモードでアプリの見栄えを良くするためにもっと時間が必要な場合やダークモードがアプリに適していない場合は、オプトアウトする方法を学ぶことができます。
端末でダークモードがオンに設定されている場合、iOS 13 SDKで構築したアプリがダークモードで実行されてしまうみたいです。
そこで私がテストを行なっていた実機もダークモードをオフに設定した際には、Simulatorと同様の結果になりました。
これでダークモードでアプリが実行されてしまう原因は分かりましたが、プロジェクトには予算などの都合上、ダークモードに対応しない場合が存在すると思います。
その場合の実装方法を紹介します。
info.plist
ファイルのUser Interface Style
を設定するなど色々な情報が飛び回っていますが、やることとしてはinfo.plist
ファイルのInformation Property List
というKeyにAppearance
というKeyを追加しValueにLight
を設定します。
こうすることでユーザーの端末でダークモードがオンになっていても、意図した画面を表示できます。