是否可以使用绑定设置 SwiftUI DatePicker minimumDate?
Is it possible to set SwiftUI DatePicker minimumDate using bindings?
我正在尝试使用@Binding 和@State 在 SwiftUI 中设置日期选择器的最小日期值。
我有三个步进器,一个用几天,一个用几个小时,一个用几分钟。这些用于设置 DateComponents 的值。
我想看到的是 DatePicker 在我使用步进器时调整到最小日期和时间。这可能吗?
我编辑了此 post 并删除了所有代码示例,因为它们与解决方案无关。这些问题是由不推荐使用的 DatePicker 初始化程序代码引起的。请参阅下面的答案。
这是解决方案。 SwiftUI DatePickers 中弃用了最小和最大日期。更改和解决方案已发布在此处:https://sarunw.com/posts/swiftui-changes-in-xcode-11-beta-4
如果 link 不起作用,请查看示例。
DatePicker 弃用的初始化程序
具有 minimumDate 和 maximumDate 的初始值设定项消失了。现在我们用 ClosedRange、PartialRangeThrough 和 PartialRangeFrom 初始化它。
我们使用 PartialRangeFrom 作为 minimumDate。
DatePicker("Minimum Date",
selection: $selectedDate,
in: Date()...,
displayedComponents: [.date])
我们使用 PartialRangeThrough 作为 maximumDate。
DatePicker("Maximum Date",
selection: $selectedDate,
in: ...Date(),
displayedComponents: [.date])
如果你想强制执行 minimumDate 和 maximumDate,请使用 ClosedRange
@State var selectedDate = Date()
var dateClosedRange: ClosedRange<Date> {
let min = Calendar.current.date(byAdding: .day, value: -1, to: Date())!
let max = Calendar.current.date(byAdding: .day, value: 1, to: Date())!
return min...max
}
DatePicker(
selection: $selectedDate,
in: dateClosedRange,
displayedComponents: [.hourAndMinute, .date],
label: { Text("Due Date") }
)
在所有示例中,Date() 都可以替换为 Date 类型的绑定。
我正在尝试使用@Binding 和@State 在 SwiftUI 中设置日期选择器的最小日期值。
我有三个步进器,一个用几天,一个用几个小时,一个用几分钟。这些用于设置 DateComponents 的值。
我想看到的是 DatePicker 在我使用步进器时调整到最小日期和时间。这可能吗?
我编辑了此 post 并删除了所有代码示例,因为它们与解决方案无关。这些问题是由不推荐使用的 DatePicker 初始化程序代码引起的。请参阅下面的答案。
这是解决方案。 SwiftUI DatePickers 中弃用了最小和最大日期。更改和解决方案已发布在此处:https://sarunw.com/posts/swiftui-changes-in-xcode-11-beta-4
如果 link 不起作用,请查看示例。
DatePicker 弃用的初始化程序 具有 minimumDate 和 maximumDate 的初始值设定项消失了。现在我们用 ClosedRange、PartialRangeThrough 和 PartialRangeFrom 初始化它。
我们使用 PartialRangeFrom 作为 minimumDate。
DatePicker("Minimum Date",
selection: $selectedDate,
in: Date()...,
displayedComponents: [.date])
我们使用 PartialRangeThrough 作为 maximumDate。
DatePicker("Maximum Date",
selection: $selectedDate,
in: ...Date(),
displayedComponents: [.date])
如果你想强制执行 minimumDate 和 maximumDate,请使用 ClosedRange
@State var selectedDate = Date()
var dateClosedRange: ClosedRange<Date> {
let min = Calendar.current.date(byAdding: .day, value: -1, to: Date())!
let max = Calendar.current.date(byAdding: .day, value: 1, to: Date())!
return min...max
}
DatePicker(
selection: $selectedDate,
in: dateClosedRange,
displayedComponents: [.hourAndMinute, .date],
label: { Text("Due Date") }
)
在所有示例中,Date() 都可以替换为 Date 类型的绑定。