是否可以使用绑定设置 SwiftUI DatePicker minimumDate?

K. *_*Law 3 swiftui

我正在尝试使用 @Binding 和 @State 在 SwiftUI 中设置日期选择器的最小日期值。

我有三个步进器,一个几天,一个小时,一个几分钟。这些用于设置 DateComponents 的值。

我想看到的是 DatePicker 在我使用步进器时调整到最小日期和时间。这可能吗?

我编辑了这篇文章并删除了所有代码示例,因为它们与解决方案无关。这些问题是由不推荐使用的 DatePicker 初始值设定项代码引起的。请参阅下面的答案。

K. *_*Law 9

这是解决方案。SwiftUI DatePickers 中不推荐使用最小和最大日期。更改和解决方案发布在此处:https : //sarunw.com/posts/swiftui-changes-in-xcode-11-beta-4

如果链接不起作用,这里是示例。

DatePicker 已弃用的初始化程序具有 minimumDate 和 maximumDate 的初始化程序已经消失。现在我们使用 ClosedRange、PartialRangeThrough 和 PartialRangeFrom 对其进行初始化。

我们使用 PartialRangeFrom 作为 minimumDate。

DatePicker("Minimum Date",
    selection: $selectedDate,
    in: Date()...,
    displayedComponents: [.date])
Run Code Online (Sandbox Code Playgroud)

我们使用 PartialRangeThrough 作为maximumDate。

DatePicker("Maximum Date",
    selection: $selectedDate,
    in: ...Date(),
    displayedComponents: [.date])
Run Code Online (Sandbox Code Playgroud)

如果你想同时使用 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") }
)
Run Code Online (Sandbox Code Playgroud)

在所有示例中,Date() 可以替换为 Date 类型的绑定。