SwiftUI列出所选行的文字颜色

时间:2019-12-15 11:18:22

标签: macos swiftui

我有一个macOS SwiftUI应用程序,该应用程序具有使用NavigationView创建的主从细节拆分视图,在左列的右侧是列表和详细信息视图。列表内容行是NavigationLink嵌入的自定义视图,其中包含两个Text元素。

是否可以更改所选行上的文本颜色?我在macOS上使用了粉红色的突出显示颜色,(当使用浅色外观时)SwiftUI知道将某些控件中的文本突出显示时(至少是分段选择器)将其更改为白色。但是我不知道如何在我的列表行,其中.foregroundColor(Color.primary)保持文本为黑色,而不管该行的背景颜色是什么。

这是与在MacOS 10.15.2上运行的Xcode 11.2.1一起使用的。

1 个答案:

答案 0 :(得分:0)

可访问的颜色

我在 Apple SwiftUI tutorial 中发现了这个。它是 Color 的扩展,并返回背景颜色上更容易访问的白色或黑色:

extension Color: Codable {
    var accessibleFontColor: Color {
        var red: CGFloat = 0
        var green: CGFloat = 0
        var blue: CGFloat = 0
        UIColor(self).getRed(&red, green: &green, blue: &blue, alpha: nil)
        return isLightColor(red: red, green: green, blue: blue) ? .black : .white
    }

    private func isLightColor(red: CGFloat, green: CGFloat, blue: CGFloat) -> Bool {
        let lightRed = red > 0.65
        let lightGreen = green > 0.65
        let lightBlue = blue > 0.65

        let lightness = [lightRed, lightGreen, lightBlue].reduce(0) { $1 ? $0 + 1 : $0 }
        return lightness >= 2
    }
}

你可以像这样使用它:

[...]
MyRowView()
    .background(backgroundColor)
    .foregroundColor(backgroundColor.accessibleFontColor)