Как проверить iOS Dark Mode?

• Как наблюдать состояние темного режима в приложении iOS • Как реагировать на изменения в состоянии темного режима в приложении iOS

Ответ 1

UIKit уже некоторое время проводит UITraitCollection. Начиная с iOS 9, вы можете использовать UITraitCollection, чтобы увидеть, поддерживает ли устройство 3D Touch (печальный разговор для другого дня)

В iOS 12 UITraitCollection получил новое свойство: var userInterfaceStyle: UIUserInterfaceStyle, которое поддерживает три случая: light, dark и 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.
    }
}

Ответ 2

Вы можете использовать следующий метод для проверки на светлый или темный режим в вашем проекте:

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
}

Как и в macOS, начиная с Mojave, вы можете определять изображения для светлого и темного режимов в каталоге ресурсов, чтобы эти изображения использовались автоматически:

asset catalogues

Взято из здесь.