Как проверить темный режим в iOS?

  • Как наблюдать за темным режимом в приложении для iOS
  • Как реагировать на изменения состояния темного режима в приложении для iOS
Здесь о том, как это сделать с помощью SwiftUI.
RPatel99 25.03.2020 16:22
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
77
1
55 755
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

func viewDidLoad() {
    super.viewDidLoad()

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

Вы также можете проверить изменения в стиле интерфейса:

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

Taken from here.

Ответ принят как подходящий

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

В iOS 12, UITraitCollection получил новое свойство: var userInterfaceStyle: UIUserInterfaceStyle, которое поддерживает три случая: light, dark и unspecified

Поскольку UIViewController наследует UITraitEnvironment, у вас есть доступ к traitCollection ViewController. Это магазины 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.
    }
}

Я думал, темный режим появился в iOS 13?

אורי orihpt 11.07.2021 19:06

@אוריorihpt Ты прав developer.apple.com/design/human-interface-guidelines/ios/…

Ori 15.12.2021 11:21

Да, но свойство UITraitCollection появилось в iOS 12.

Marko 16.12.2021 19:35

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