DarkMode切り替えで画像が切り替わらない時の対処法

iOS13からDarkMode対応が必須になりましたが、DarkModeはいろんな問題を抱えています。

その中の一つが、アイコンなどの画像リソースが端末の表示モード切り替えをしても自動で切り替わってくれないということです。

この問題の対処方法はtraitCollectionDidChangeで判定を行うという方法です。traitCollectionDidChangeは画面の回転の際にも呼び出されるので回転を許可しているアプリでは注意が必要かもしれません。

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

        guard let previousTraitCollection = previousTraitCollection else {
            return
        }

        if #available(iOS 13.0, *) {
            let hasChanged = previousTraitCollection.hasDifferentColorAppearance(comparedTo: self.traitCollection)
            if hasChanged {
            	// 切り替わらない画像の代入
        }
    }
}

参考文献

traitCollectionDidChange(_:)

iOS13: Dark Modeの対応方法