SwiftUI 多组件选择器

Posted

技术标签:

【中文标题】SwiftUI 多组件选择器【英文标题】:SwiftUI Multi Components Picker 【发布时间】:2021-12-28 19:55:26 【问题描述】:

我尝试构建一个多组件选择器,一开始我遇到了两个组件之间的重叠视图,这使得与 UI 交互变得困难,然后我找到了解决问题的“.compositingGroup()”属性模拟器,但在真实设备上我遇到了同样的问题,然后我尝试了许多解决方案,比如将两个选择器嵌入“几何阅读器”并从中设置框架,但它也不起作用,所以请如果有人知道如何修复这个问题我很高兴知道。

代码

ZStack 
            background
            HStack(spacing: 16) 
                hoursPicker
                minutesPicker
            
        

    private var hoursPicker: some View 
        
        HStack(spacing: 8) 
            Picker("Select Hour(s)", selection: $selectedHours) 
                ForEach(hoursRange, id: \.self) 
                    Text("\($0)")
                        .toolBarViewNormalStyle()
                
            
            .frame(width: 32, height: 32, alignment: .center)
            .clipShape(RoundedRectangle(cornerRadius: 8, style: .continuous))
            .compositingGroup()
            .labelsHidden()
            .pickerStyle(.wheel)
            
            Text("Hr")
                .toolBarViewNormalStyle()
        
    

    private var minutesPicker: some View 
        
        HStack(spacing: 8) 
            Picker("Select Minute(s)", selection: $selectedMinutes) 
                ForEach(minutesRange, id: \.self) 
                    Text("\($0)")
                        .toolBarViewNormalStyle()
                
            
            .frame(width: 32, height: 32, alignment: .center)
            .clipShape(RoundedRectangle(cornerRadius: 8, style: .continuous))
            .compositingGroup()
            .labelsHidden()
            .pickerStyle(.wheel)
            
            Text("Min")
                .toolBarViewNormalStyle()
        
    

【问题讨论】:

【参考方案1】:

为什么不使用实际的DatePicker() 设置为.hourAndMinute

            DatePicker("Select time",
                       selection: $selectedDate,
                       displayedComponents: .hourAndMinute)
                .datePickerStyle(.wheel)

【讨论】:

我不能使用“日期选择器”,因为我的选择器允许用户选择 1 到 23 小时和 1 到 55 分钟的持续时间,因此我不能使用“日期选择器”。 这似乎是 ios 15 (FB9764631) 中的一个错误。我目前的建议是使用.menu 选择器样式。 我喜欢使用它,但它会破坏 UI 和 UX 然后我会使用 UIViewRepresentable 并将 UIKit 选择器放在一起。 你有示例代码吗?

以上是关于SwiftUI 多组件选择器的主要内容,如果未能解决你的问题,请参考以下文章

来自先前选择器的选择器值 - CoreData/SwiftUI

现代图片选择器(PHPicker)在 SwiftUI 应用

SwiftUI - 选择器

选择器(SegmentedPickerStyle)中的选择效果不佳 - SwiftUI

SwiftUI 选择器分隔符

如何让 SwiftUI 中的选择器输出选择的值?