Невозможно достичь темного режима с помощью SwiftUI - PullRequest
2 голосов
/ 14 июня 2019
struct ContentView_Previews : PreviewProvider {
    static var previews: some View {
        ContentView().environment(\.colorScheme, .dark)
    }
}

Я использую приведенный выше код для достижения темного режима в моем демонстрационном проекте, но он не работает.
Любая помощь или понимание будут очень признательны.

Ответы [ 3 ]

4 голосов
/ 14 июня 2019

Кажется, это ошибка в бета-версии Xcode 11.0. Временное решение - обернуть ваш контент в NavigationView.

Например, следующий код не будет действовать в режиме предварительного просмотра в темном режиме:

var body: some View {
  Text("Hello World")
}

Но после упаковки содержимого в NavigationView предварительный просмотр в темном режиме работает, как и ожидалось:

var body: some View {
  NavigationView {
    Text("Hello World")
  }
}

Результат:

enter image description here

2 голосов
/ 22 июня 2019

Темный режим наполовину работает в предварительном просмотре, он просто забывает рисовать фон.

Следующий обходной путь позволяет добавить .darkModeFix() к вашему ContentView() в функции предварительного просмотра.При желании вы можете добавить false в качестве параметра для отключения темного режима.

struct ContentView_Previews : PreviewProvider {
    static var previews: some View {
        Group {
            ContentView()
                .darkModeFix()
        }
    }
}

Просто добавьте следующее где-нибудь в вашем проекте:

public struct DarkView<Content> : View where Content : View {
    var darkContent: Content
    var on: Bool
    public init(_ on: Bool, @ViewBuilder content: () -> Content) {
        self.darkContent = content()
        self.on = on
    }

    public var body: some View {
        ZStack {
            if on {
                Spacer()
                    .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
                    .background(Color.black)
                    .edgesIgnoringSafeArea(.all)
                darkContent.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity).background(Color.black).colorScheme(.dark)
            } else {
                darkContent
            }
        }
    }
}

extension View {
    public func darkModeFix(_ on: Bool = true) -> DarkView<Self> {
        DarkView(on) {
            self
        }
    }
}
1 голос
/ 16 июня 2019

Ошибка, по-видимому. Даже выполнение MyView().colorScheme(.dark) не работает.
Щелкните правой кнопкой мыши (щелкните правой кнопкой мыши или удерживая клавишу Ctrl) кнопку «Воспроизведение» (которую вы используете для имитации запуска приложения). Нажмите Предварительный просмотр отладки. Откройте область отладки. Затем вы можете использовать Enviroment Overrides для настройки таких вещей, как темный / светлый режим, динамический тип, настройки доступности и т. Д. Кстати, чтобы открыть настройки Enviroment Overrides, перейдите чуть выше отладчика и нажмите эту кнопку:
Env overrides look similar to a toggle switch

...