Xcode 11 - настройка темного режима SwiftUI - PullRequest
4 голосов
/ 10 июня 2019

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

У меня есть названный цвет в каталоге активов. enter image description here

Я установил режим plist в темный режим для упрощения тестирования. enter image description here

Мое содержимое выглядит так:

struct ContentView : View {
var body: some View {
    VStack {
        Text("Hello World")
        Text("Yo yo yo")
            .color(Color("darkModeColor"))
    }

}

}

Независимо от того, что я делаю, цвет ВСЕГДА имеет вид "Любой", когда он должен принимать голубой цвет.

enter image description here

Я знаю, что сам темный режим работает, потому что все системные семантические цвета, предоставляемые Apple, работают просто отлично, как вы можете видеть, что текст "Hello World" изменен на белый.

Есть идеи, что мне не хватает или кто-то еще сталкивался с этой проблемой с Xcode 11 Beta 1?

Ответы [ 4 ]

7 голосов
/ 11 июня 2019

Это, вероятно, ошибка в этой бета-версии Xcode 11. Я попробовал функцию темного режима в приложении UIKit, и она отлично работает при использовании UIColor, но тот же цвет не будет работать при использовании Color в SwiftUI.Надеюсь, это будет исправлено в следующих выпусках.


Обновление : эта проблема была исправлена ​​с Xcode 11 beta 3 .

0 голосов
/ 16 июня 2019

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

import SwiftUI

extension Color {

    static let lightBackgroundColor = Color(white: 1.0)

    static let darkBackgroundColor = Color(white: 0.0)

    static func backgroundColor(for colorScheme: ColorScheme) -> Color {
        if colorScheme == .dark {
            return darkBackgroundColor
        } else {
            return lightBackgroundColor
        }
    }
}

И в представлениях, где вам нужночтобы получить доступ к этим цветам, вы должны добавить свойство среды для цветовой схемы и использовать его для извлечения динамического цвета:

import SwiftUI

struct ColoredView : View {

    @Environment(\.colorScheme) var colorScheme: ColorScheme

    var body: some View {
        Rectangle().fill(Color.backgroundColor(for: self.colorScheme))
    }
}

Эти цвета, определенные в коде, работают как для предварительного просмотра Xcode, так и для симулятора.

0 голосов
/ 11 июня 2019

Как ответил @ Mo-Reza-Farahani, это похоже на ошибку в Xcode11-beta.Вот почему он не работает в режиме Preview.

Но он работает в симуляторе.Вот шаги, которые я выполнил.

  1. Добавлен тот же код, что и в вопросе
  2. Запустите приложение в симуляторе
  3. Перейдите в приложение Настройки в симуляторе -> Разработчик-> включил 'Dark Appearance' в положение ON
  4. Теперь убейте приложение и запустите снова - этот цвет темного режима появится сейчас.
0 голосов
/ 10 июня 2019

Вы можете изменить цветовую схему в вашем превью

struct ContentView_Previews : PreviewProvider {
    static var previews: some View {
        ContentView().environment(\.colorScheme, .dark)
    }
}

upd : и вы можете создавать любые превью для светлых и темных режимов

struct ContentView_Previews : PreviewProvider {
    static var previews: some View {
        Group {
            ContentView()
            ContentView().environment(\.colorScheme, .dark)
        }
    }
}
...