我有一个macOS SwiftUI应用程序,该应用程序具有使用NavigationView
创建的主从细节拆分视图,在左列的右侧是列表和详细信息视图。列表内容行是NavigationLink
嵌入的自定义视图,其中包含两个Text
元素。
是否可以更改所选行上的文本颜色?我在macOS上使用了粉红色的突出显示颜色,(当使用浅色外观时)SwiftUI知道将某些控件中的文本突出显示时(至少是分段选择器)将其更改为白色。但是我不知道如何在我的列表行,其中.foregroundColor(Color.primary)
保持文本为黑色,而不管该行的背景颜色是什么。
这是与在MacOS 10.15.2上运行的Xcode 11.2.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)