【问题标题】:How to give DatePicker a minute interval in SwiftUI如何在 SwiftUI 中给 DatePicker 一个分钟间隔
【发布时间】:2020-03-17 11:42:23
【问题描述】:

有谁知道如何给分钟 DatePicker 一个间隔?我试图只显示 15 的倍数(0、15、30、45)。这是否只有通过与 UIKit 交互才能实现?

我相信它没有使用in: ...Date() 部分,至少我想不出解决方案。这是我的sn-p:

DatePicker(
                "",
                selection: $selectedDate,
                /*in: ...Date(),*/
                displayedComponents: .hourAndMinute
            )

非常感谢!

【问题讨论】:

  • 不幸的是,我认为您还不能在 SwiftUI 中做到这一点。您必须提供的 PartialRangeThrough<Date> 类型不支持跨值(您需要类似 StrideThrough 类型的东西,而 DatePicker 不接受)。我认为这是可能的唯一方法是使用 UIDatePicker。希望 Apple 能在未来解决这个问题。

标签: swift swiftui


【解决方案1】:

如何使用两个选择器,一个用于小时,一个用于分钟,然后转换为 Date()?它并不漂亮,但这只是其中的一部分:

struct ContentView: View {
    @State private var hour = 1
    @State private var minute = 0

    let minutes = [0, 15, 30, 45]

    var body: some View {
        GeometryReader { geometry in
            HStack {
                Picker("Hour", selection: self.$hour) {
                    ForEach(1...12, id: \.self) {
                        Text("\($0)")
                    }
                }
                .labelIsHidden()
                .frame(maxWidth: geometry.size.width / 4)
                .clipped()

                Picker("Minutes", selection: self.$minute) {
                    ForEach(self.minutes, id: \.self) { minute in
                        Text(minute == 0 ? " : 0\(minute)" : " : \(minute)")
                    }
                }
                .labelIsHidden()
                .frame(maxWidth: geometry.size.width / 4)
                .clipped()

            }
        }
    }
}

【讨论】:

  • 非常感谢!我应该提到这一点,我尝试使用两个选择器。不过我不知道.clipped()。没有一个选择器总是覆盖另一个。使用 GeometryReader 与 UIScreen 相比有什么好处?
  • 一个优势可能是 GeometryReader 是 SwiftUI 原生的。我还没有尝试过它以了解原因,但我已经阅读了 UIScreen 在 SplitView 上遇到问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 2013-06-28
  • 2011-05-19
相关资源
最近更新 更多