11

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

我在资产目录中有一个命名颜色。在此处输入图像描述

我将我的 plist 模式设置为暗模式以便于测试。 在此处输入图像描述

我的内容视图如下所示:

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

}

}

无论我做什么,当它应该呈现青色时,颜色总是“任何”外观。

在此处输入图像描述

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

任何想法我缺少什么或者其他人是否遇到了 Xcode 11 Beta 1 的这个问题?

4

3 回答 3

11

这可能是 Xcode 11 测试版中的一个错误。我在 UIKit 应用程序中尝试了暗模式功能,它可以完美使用,但在 SwiftUI 中UIColor无法使用相同的颜色。Color希望这将在下一个版本中得到修复。


更新: Xcode 11 beta 3修复了这个问题。

于 2019-06-10T22:31:07.137 回答
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 预览以及模拟器。

于 2019-06-16T15:17:07.620 回答
-2

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

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)
        }
    }
}
于 2019-06-10T18:24:12.950 回答