Реализация переключения темного режима в приложении SwiftUI - PullRequest
0 голосов
/ 20 октября 2019

В настоящее время я смотрю на темный режим в своем приложении. Хотя сам по себе Dark Mode не представляет особой сложности из-за моей основы SwiftUI, я борюсь с возможностью установить ColorScheme независимо от системы ColorScheme.

Я нашел это в руководящих принципах по интерфейсу для яблок , и я хотел бы реализовать эту функцию. (Ссылка: Рекомендации по интерфейсу для человека )

Есть идеи, как это сделать в SwiftUI? Я нашел некоторые подсказки к @Environment, но никакой дополнительной информации по этой теме нет. (Ссылка: Последний абзац )

1 Ответ

0 голосов
/ 20 октября 2019

Сначала вам нужно получить доступ к окну, чтобы изменить приложение colorScheme, которое вызывало UserInterfaceStyle в UIKit.

Я использовал это в SceneDelegate:

private(set) static var shared: SceneDelegate?

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    Self.shared = self
    ,,,
}

Затем вынужно привязать действие к переключателю. Итак, вам нужна модель.

struct ToggleModel {
    var isDark: Bool = true {
        didSet { SceneDelegate.shared?.window!.overrideUserInterfaceStyle = isDark ? .dark : .light }
    }
}

Наконец, вам просто нужно переключить переключатель:

struct ContentView: View {
     @State var model = ToggleModel()

     var body: some View {
         Toggle(isOn: $model.isDark) {
             Text("is Dark")
        }
    }
}
...