web-dev-qa-db-ja.com

iOSのダークモードを確認する方法

•iOSアプリでダークモードの状態を観察する方法•iOSアプリでダークモードの状態の変化に対応する方法

42
Marko

UIKitには、しばらくの間UITraitCollectionがありました。 iOS 9以降、UITraitCollectionを使用して、デバイスが3Dタッチをサポートしているかどうかを確認できました(別の日の悲しい会話)

iOS 12の場合 、UITraitCollectionに新しいプロパティが追加されました:var userInterfaceStyle: UIUserInterfaceStyleは、3つのケースをサポートします:lightdark、およびunspecified

UIViewControllerはUITraitEnvironmentを継承するため、ViewControllerのtraitCollectionにアクセスできます。これはuserInterfaceStyleを格納します。

UITraitEnviromentには、状態の変化が発生したときにコードを解釈するのに役立ついくつかの気の利いたプロトコルスタブもあります(ユーザーがダークサイドからライトサイドに、またはその逆に切り替えたとき)。ここにあなたのための素晴らしいコーディング例があります:

class MyViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        if self.traitCollection.userInterfaceStyle == .dark {
            // User Interface is Dark
        } else {
            // User Interface is Light
        }

    }


    override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        // Trait collection has already changed
    }

    override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {
        // Trait collection will change. Use this one so you know what the state is changing to.
    }
}

86
Marko

次の方法を使用して、プロジェクトの明モードまたは暗モードを確認できます。

switch traitCollection.userInterfaceStyle {
    case .light, .unspecified:
    case .dark:
}

インターフェイススタイルの変更を確認することもできます。

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    super.traitCollectionDidChange(previousTraitCollection)

    let userInterfaceStyle = traitCollection.userInterfaceStyle // Either .unspecified, .light, or .dark
    // Update your user interface based on the appearance
}

Mojave以降のmacOSのように、アセットカタログでライトモードとダークモードの両方のイメージを定義して、これらのイメージが自動的に使用されるようにすることができます。

asset catalogues

here から取得。

21
LinusGeffarth