使用 .colorInvert()
和 .colorMultiply(.white)
可以将文本颜色更改为白色,但在设备处于黑暗模式时不起作用。尝试使用以下方法:
DatePicker("Date", selection: $selection)
.colorScheme(.dark) // or .light to get black text
我只是简单地设置了accentColor,它就起作用了。
@State private var date = Date()
DatePicker("Select a date",
selection: $date, in: ...Date(),
displayedComponents: .date)
.labelsHidden()
.accentColor(.orange)
.compact
日期选择器样式中,当活动状态时会显示此强调色,但在控件被点击之前文本是黑色的。 - pkamb如果您使用背景颜色,您可以通过以下方式在浅色或深色模式下使文本显示为白色。
struct PickerDate: View {
@Environment(\.colorScheme) var colorScheme
@State var date: Date
var body: some View {
VStack {
DatePicker("Record Date", selection: $date, in: ...Date(), displayedComponents: .date)
.labelsHidden()
.colorMultiply(colorScheme == .dark ? .black : .white)
.colorInvert()
}
}
}
}
我使用扩展程序来为亮色模式和暗色模式下的文本自定义颜色。
extension View {
@ViewBuilder func changeTextColor(_ color: Color) -> some View {
if UITraitCollection.current.userInterfaceStyle == .light {
self.colorInvert().colorMultiply(color)
} else {
self.colorMultiply(color)
}
}
}
以下是示例。
DatePicker("Date", selection: $selection)
.labelsHidden()
.changeTextColor(.green)
preferredColorScheme
修改视图,则userInterfaceStyle
不会更改,因此可能需要使用环境中的值。 - CMashDatePicker
更加简洁: .environment(\.colorScheme, .dark)
.environment(\.colorScheme, .light)
DatePicker("DatePicker", selection: self.$date, displayedComponents: .hourAndMinute)
.labelsHidden()
.colorMultiply(Color.white)
.colorInvert()