SwiftUI:如何设置时间选择器的范围以包含午夜?

Posted

技术标签:

【中文标题】SwiftUI:如何设置时间选择器的范围以包含午夜?【英文标题】:SwiftUI: How to set a time picker's range to contain midnight? 【发布时间】:2021-07-29 05:54:18 【问题描述】:

我正在使用 SwiftUI 2 并使用 DatePickerdisplayedComponents: .hourAndMinute

我想让用户选择晚上 10 点到凌晨 2 点之间的任何时间。因此,我要使用的时间范围包含午夜。

不幸的是,当我为DatePicker 提供这个时间范围时,它只允许我选择晚上 10:00 到晚上 11:59 之间的时间:

@State private var date = Calendar.current.date(bySettingHour: 22, minute: 0, second: 0, of: Date())!
let startDate = Calendar.current.date(bySettingHour: 22, minute: 0, second: 0, of: Date())!

...

DatePicker("", selection: $date, in: startDate...Calendar.current.date(byAdding: .hour, value: 4, to: startDate)!, displayedComponents: .hourAndMinute)

换句话说,只能选择直到午夜的时间,尽管提供的时间范围还包含 0 am 到 2 am(第二天)。

如何解决?

【问题讨论】:

【参考方案1】:

通过删除displayedComponents,一切似乎都按预期工作。

如果您的目标是选择晚上 10 点到凌晨 2 点之间的任何时间,这意味着 10PM today2AM tomorrow,那么只显示 hourAndMinute 可能会令人困惑

DatePicker("", selection: $date, in: startDate...Calendar.current.date(byAdding: .hour, value: 4, to: startDate)!)

删除displayedComponents

【讨论】:

嗨 Cédric,我很清楚这种可能性。但是,我想让我的应用程序的用户在接下来的 4 小时内选择任何时间点。因此,如果是晚上 10 点,用户应该可以轻松地选择晚上 10 点到凌晨 2 点之间的任何时间,而不必担心当天的情况。我不认为,这会让人感到困惑。

以上是关于SwiftUI:如何设置时间选择器的范围以包含午夜?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI 从 CoreData 设置初始选择器值

设置连续轮选择器 - SwiftUI

如何在 SwiftUI 中延迟 @State 变量的设置值

SwiftUI 从选择器的字符串结果中设置绑定

Swiftui Multi Picker 以最小最大值更改选择

SwiftUI:以编程方式设置 Picker 的值