Хорошо. Я знаю, что это не должно быть ракетостроением. Кажется, я не могу заставить работать темный режим, и я несколько раз читал документацию. Надеясь, что кто-то может выбрать то, что мне не хватает.
У меня есть именованный цвет в каталоге активов.
Я установил свой режим plist в темный режим для облегчения тестирования.
Мое представление контента выглядит так:
struct ContentView : View {
var body: some View {
VStack {
Text("Hello World")
Text("Yo yo yo")
.color(Color("darkModeColor"))
}
}
}
Независимо от того, что я делаю, цвет ВСЕГДА имеет вид «Любой», когда он должен приобретать голубой цвет.
Я знаю, что сам темный режим работает, потому что все системные семантические цвета, предоставляемые Apple, работают просто отлично, поскольку вы можете видеть, что текст «Hello World» изменился на белый.
Любые идеи, что мне не хватает, или кто-нибудь еще сталкивается с этой проблемой с Xcode 11 Beta 1?
Вы можете изменить цветовую схему в предварительном просмотре
struct ContentView_Previews : PreviewProvider {
static var previews: some View {
ContentView().environment(\.colorScheme, .dark)
}
}
вверх: и можно создавать любые превьюшки для светлого и тёмного режимов
struct ContentView_Previews : PreviewProvider {
static var previews: some View {
Group {
ContentView()
ContentView().environment(\.colorScheme, .dark)
}
}
}
Это не работает с цветами, пожалуйста, внимательно прочитайте вопрос, попробуйте то же самое, а затем ответьте.
Вероятно, это ошибка в этой бета-версии Xcode 11. Я попробовал функцию темного режима в приложении UIKit, и она отлично работает с использованием UIColor
, но тот же цвет не будет работать с использованием Color
в SwiftUI. Надеюсь, это будет исправлено в следующих релизах.
Обновлять: эта проблема устранена в Xcode 11 бета 3.
согласованный. просто помогает запустить его другим разработчикам, а не рвать на себе волосы!
это все еще происходит в бета-версии 2, не так ли?
@Miotz Да, это еще не исправлено.
Рабочее (но довольно подробное) решение, которое мы можем использовать для преодоления этого текущего ограничения, состоит в том, чтобы расширить 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, так и для симулятора.
Если нам нужно использовать такой цвет, то что означает цветовой шаблон в активах. ваш вопрос не дает ответа на вопрос, вместо этого он дает альтернативный ручной способ...
Это все очень хорошо и модно, но, как указывали другие, цветовой шаблон в активах не работает в текущей бета-версии. Я просто предоставляю рабочую альтернативу.
У меня работает - по крайней мере, как временное решение. Я хотел семантические границы для нескольких представлений, содержащихся в моем корне ContentView
. Я ценю совет.
Эта проблема была исправлена в Xcode 11 beta 3:]