SwiftUI - 访问 iOS 13 的语义颜色

Jac*_*cob 10 swiftui

iOS 13 引入了语义颜色:一种指定颜色用途而不是其实际值的方式。这允许颜色在启用暗模式时自动适应。

UIKit中,这些颜色可以很容易地通过对静态成员访问UIColor(例如UIColor.label()UIColor.secondaryLabel()等)。可以在此文档页面上找到所有可用语义颜色的详细列表。

但是,SwiftUI 的Color类型没有等效的静态成员。因此,这将是无效的:

// Error: Type 'Color?' has no member 'secondaryLabel'
var body: some View {

    Text("Hello World!")
        .color(.secondaryLabel)

}
Run Code Online (Sandbox Code Playgroud)

我将如何在 SwiftUI 中访问这些语义颜色?

Edw*_*ard 11

SwiftUI 中的 Color 结构有一个 UIColor 初始值设定项。例如,您可以使用标签 UIColor 更改 Text foregroundColor。

import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationView {
            Text("Hello World")
                .foregroundColor(Color(.label))
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        Group {
            ContentView()

            ContentView()
                .environment(\.colorScheme, .dark)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Jac*_*cob 4

虽然Color这些语义颜色没有静态成员,但根据文档Color确实有一个初始值设定项,允许您指定AppearanceColorName.

然而,我说“根据文档”是因为,到目前为止,这个初始化程序似乎在 Xcode 中不可用。在后续的测试版中,当此初始化程序可用时,可以像这样使用它:

var body: some View {

    Text("Hello World!")
        .color(Color(apperanceName: .secondaryLabel))

}
Run Code Online (Sandbox Code Playgroud)