3

ダークモードをサポートしています。一部のビュー コントローラーでは、traitCollectionDidChange(_)ユーザー インターフェイス スタイルの変更を処理するために使用しています。

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
        super.traitCollectionDidChange(previousTraitCollection)
        if #available(iOS 13.0, *) {
            if let p = previousTraitCollection {
                print("TRAIT COLLECTION \(p.userInterfaceStyle.desc) -> \(traitCollection.userInterfaceStyle.desc). \(UIApplication.shared.applicationState.desc); \(p.hasDifferentColorAppearance(comparedTo: traitCollection) ? "TRAIT CHANGED" : "TRAIT SAME")")
            }
        }
    }

ホームボタンを押してバックグラウンドに移動すると、このメソッドが 2 回起動します。

TRAIT COLLECTION DARK -> LIGHT. BACKGROUND; TRAIT CHANGED
TRAIT COLLECTION LIGHT -> DARK. BACKGROUND; TRAIT CHANGED

そして、iOS 設定で外観を変更してフォアグラウンドに戻すと、

TRAIT COLLECTION DARK -> LIGHT. INACTIVE; TRAIT CHANGED

変。バックグラウンドに移行するたびに、ユーザー インターフェイスのスタイルが前後に変更されます。なんで?

4

1 に答える 1

10

これは予期される動作です。アプリが中断されると、iOS はアプリ スイッチャーに表示する画面のスナップショットを取得します。

アプリが一時停止している間に明から暗へ、または暗から明への切り替えが発生した場合に備えて、実際には 2 つのスナップショットが作成されます。ひとつの光とひとつの闇。

その後、iOS はアプリ スイッチャーに正しいスナップショットを表示できます。

于 2020-08-12T08:36:07.623 に答える