Xcode 11 -- SwiftUI 的深色模式设置
Xcode 11 -- SwiftUI's dark mode setup
好的。我知道这不应该是火箭科学。我似乎无法使用暗模式,我已经阅读了几次文档。希望有人能找出我遗漏的东西。
我在资产目录中有一个命名颜色。
我将我的 plist 模式设置为暗模式以便于测试。
我的内容视图如下所示:
struct ContentView : View {
var body: some View {
VStack {
Text("Hello World")
Text("Yo yo yo")
.color(Color("darkModeColor"))
}
}
}
无论我做什么,颜色总是 "Any" 应该呈现青色的外观。
我知道深色模式本身可以工作,因为苹果提供的所有系统语义颜色都工作得很好,你可以看到 "Hello World" 文本变成了白色。
有什么想法我遗漏了什么,或者其他人 运行 对 Xcode 11 Beta 1 的这个问题有什么想法吗?
您可以在预览中更改配色方案
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)
}
}
}
这可能是 Xcode 11 测试版中的一个错误。我尝试了 UIKit 应用程序中的深色模式功能,使用 UIColor
它工作得很好,但相同的颜色不会在 SwiftUI 中使用 Color
工作。希望这将在下一个版本中得到修复。
更新:此问题已通过 Xcode 11 beta 3 修复。
我们可以用来克服此当前限制的有效(但相当冗长)解决方案是使用使用当前配色方案参数化的方法扩展 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 预览和模拟器。
好的。我知道这不应该是火箭科学。我似乎无法使用暗模式,我已经阅读了几次文档。希望有人能找出我遗漏的东西。
我在资产目录中有一个命名颜色。
我将我的 plist 模式设置为暗模式以便于测试。
我的内容视图如下所示:
struct ContentView : View {
var body: some View {
VStack {
Text("Hello World")
Text("Yo yo yo")
.color(Color("darkModeColor"))
}
}
}
无论我做什么,颜色总是 "Any" 应该呈现青色的外观。
我知道深色模式本身可以工作,因为苹果提供的所有系统语义颜色都工作得很好,你可以看到 "Hello World" 文本变成了白色。
有什么想法我遗漏了什么,或者其他人 运行 对 Xcode 11 Beta 1 的这个问题有什么想法吗?
您可以在预览中更改配色方案
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)
}
}
}
这可能是 Xcode 11 测试版中的一个错误。我尝试了 UIKit 应用程序中的深色模式功能,使用 UIColor
它工作得很好,但相同的颜色不会在 SwiftUI 中使用 Color
工作。希望这将在下一个版本中得到修复。
更新:此问题已通过 Xcode 11 beta 3 修复。
我们可以用来克服此当前限制的有效(但相当冗长)解决方案是使用使用当前配色方案参数化的方法扩展 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 预览和模拟器。