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

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

2 ответа

Решение

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.
    }
}

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

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, вы можете определить изображения для светлого и темного режима в вашем каталоге ресурсов, чтобы эти изображения использовались автоматически:

Взято отсюда.

Другие вопросы по тегам