使用
.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)
如果您使用背景颜色,您可以这样做以使文本在浅色或深色模式下显示为白色
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)
我发现将此修改器应用于
DatePicker
会更干净:
强制颜色为白色
.environment(\.colorScheme, .dark)
强制颜色变暗
.environment(\.colorScheme, .light)
DatePicker("DatePicker", selection: self.$date, displayedComponents: .hourAndMinute)
.labelsHidden()
.colorMultiply(Color.white)
.colorInvert()
.accentColor() 将在不久的将来被弃用。
.colorInvert() 一旦点击就会停止工作。
现在我使用:
.preferredColorScheme(.dark)
.tint(baby.color.bgColor)
.colorMultiply(baby.color.bgColor)
但在某些情况下使用 .preferredColorScheme(.dark) 会影响所有视图色调,具体取决于您使用的颜色。