我有一个 macOS SwiftUI 应用程序,它有一个使用 NavigationView
创建的主从 Split View,左栏是一个列表,右侧是详细 View 。列表内容行是 NavigationLink
,其中嵌入了带有几个 Text
元素的自定义 View 。
有什么方法可以更改选定行的文本颜色吗?我在 macOS 上使用粉红色高亮颜色,并且(当使用浅色外观时)SwiftUI 知道在突出显示时将某些控件中的文本更改为白色(至少是分段选择器。)但我不知道如何在我的列表行,无论行的背景颜色如何,.foregroundColor(Color.primary)
都将文本保持为黑色。
这是在 macOS 10.15.2 上运行的 Xcode 11.2.1。
最佳答案
可访问的颜色
我在 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)
关于macos - SwiftUI 列表选中行文本颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59343348/