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

问题描述

我正在使用 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,of: Date())!

...

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

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

如何解决

解决方法

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

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

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

删除 displayedComponents