Xcode 11 -- SwiftUI的暗黑模式设置

11

好的。我知道这不应该是什么高深的科学。我似乎无法让暗模式起作用,我已经阅读了文档几次。希望有人能找出我所缺少的。

我在资源目录中有一个命名的颜色。 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"))
    }

}

无论我做什么,颜色总是显示为“任意”外观,而不是应该采用青色。

输入图片描述

我知道暗模式本身是有效的,因为苹果提供的所有系统语义颜色都可以正常工作,就像您可以看到“Hello World”文本变为白色。

您有什么想法我可能遗漏了什么或其他人是否在使用Xcode 11 Beta 1时遇到此问题?


这个问题已经在Xcode 11 beta 3中得到了修复 :] - M Reza
3个回答

11

这很可能是 Xcode 11 beta 版本中的一个 Bug。我在 UIKit 应用程序中尝试了暗黑模式功能,使用 UIColor 完美运行,但是同样的颜色在 SwiftUI 中使用 Color 无法正常工作。希望在下个版本中修复此问题。


更新:此问题已在 Xcode 11 beta 3 中修复。


1
同意。与其自己费力苦思冥想,不如向其他开发者请教一下! - Craig Fisher
这在 beta 2 版本中仍然发生,是吗? - Andrea Miotto
@Miotz 是的,它还没有被修复。 - M Reza

4
我们可以使用一个工作(但相当冗长)的解决方案来克服当前限制,即通过以下方式使用参数化的方法扩展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预览,也适用于模拟器。

如果我们必须像这样使用颜色,那么资产中的颜色模板有什么意义。你的问题没有回答这个问题,而是提供了另一种手动的方式... - Mehul Thakkar
这一切都很好,但正如其他人指出的那样,在当前的测试版中,资产中的颜色模板无法使用。我只是提供了一个可行的替代方案。 - l_priebe
1
对我来说是有效的,至少作为一个临时解决方案。我想在我的根ContentView中为几个包含的视图添加语义边框。非常感谢这个提示。 - user7014451

-2

您可以在预览中更改配色方案

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)
        }
    }
}

这个问题与颜色有关,请仔细阅读问题,尝试相同的方法然后回答。 - Mehul Thakkar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接