SwiftUI-访问iOS 13的语义颜色

时间:2019-06-14 00:13:22

标签: swiftui

iOS 13引入了语义颜色:一种指定颜色目的而不是其实际值的方法。启用暗模式时,这可以使颜色自动适应。

在UIKit中,可以通过UIColor上的静态成员(例如UIColor.label()UIColor.secondaryLabel()等)轻松访问这些颜色。在this documentation page上可以找到所有可用语义颜色的详尽列表。

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

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

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

}

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

2 个答案:

答案 0 :(得分:3)

SwiftUI中的Color结构具有UIColor初始化程序。因此,例如,您可以使用标签UIColor更改“文本前景颜色”。

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

答案 1 :(得分:0)

虽然Color没有用于这些语义颜色的静态成员,但是according to the documentationColor确实具有允许您指定AppearanceColorName的初始化程序。

但是,我说“根据文档”是因为到目前为止,该初始化程序似乎在Xcode中不可用。在后续的beta版本中,当此初始化器可用时,可以按以下方式使用它:

var body: some View {

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

}