一个用于 tvOS 的 SwiftUI DatePicker 视图
目前,tvOS 还没有原生的 SwiftUI DatePicker。 这就是我创建这个 Swift 包来填补空白的原因 😊 API 模仿了适用于 iOS、macOS 和 macCatalyst 的原生 SwiftUI DatePicker 的 API。
只需将此 Swift 包作为依赖项添加到您的 Package.swift 中
.package(url: "https://github.com/crelies/TVDatePicker.git", from: "0.1.0")
以下代码片段展示了如何在您的 tvOS 应用程序中使用 DatePicker view
TVDatePicker(
_ titleKey: LocalizedStringKey,
selection: Binding<Date>,
minimumDate: Date,
displayedComponents: Components = .all,
calendar: Calendar = .current,
dateFormatter: DateFormatter = DateFormatters.defaultFormatter,
label: () -> Label
) // Available when Label conforms to View.
最初,该视图显示为一个按钮,其中包含一个水平堆栈,包含指定的 label、一个表示当前 selection 日期字符串的 Text 视图和一个 disclosure indicator Image 视图。 如果您按下按钮,将出现一个带有实际日期选择器视图的 sheet。 以下截图是一个例子
DatePicker 视图是通过在 List / VStack 中使用多个带有 SegmentedPickerStyle 的 Picker 实现的。 每个 Picker 代表一个日期组件,如 year、month 或 date。 由于焦点引擎的问题,对于支持的 tvOS 版本 13.0、14.0 和 > 14.0,实现略有不同。 但我认为在大多数情况下您可以忽略这个细节。
DatePicker 仅使用 Gregorian calendar 进行了测试。year 组件一次仅显示 10 年(相对于指定 minimum date 的年份,selected year +/- 5 years)。year 组件尊重 minimum date。 相反,all months of a year 和 all days of a month 始终可见。hourAndMinute 组件始终显示一天的所有 24 hours。hourAndMinute 组件仅支持 minute 每五分钟一个步长。