【问题标题】:SwiftUI -- More than one Picker in a viewSwiftUI -- 一个视图中的多个 Picker
【发布时间】:2022-06-15 13:48:12
【问题描述】:

我正在尝试使用几个独立的 SwiftUI 选择器创建一个视图。取消注释 .pickerStyle(.wheel) 语句后,以下代码将不起作用。我无法选择前两个 Picker,所有交互都转到最后一个 :-(

struct ContentView: View {
    @State private var selection1 = 0
    @State private var selection2 = 0
    @State private var selection3 = 0

    var body: some View {
        HStack {
            NumberPickerView(selection: $selection1)
            NumberPickerView(selection: $selection2)
            NumberPickerView(selection: $selection3)
        }
    }
}

struct NumberPickerView: View {
    @Binding var selection : Int
    var body: some View {
        Picker("Number", selection: $selection) {
            ForEach(0..<100) { index in
                Text("\(index)")
            }
        }//.pickerStyle(.wheel)
        .frame(width: 50)
        .clipped()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

我很确定我遗漏了一些简单的细节。

【问题讨论】:

  • 众所周知,它不再起作用了——Apple 隐含地禁止这样做,因为似乎是 iOS 15。
  • 不这么认为...将HStack 更改为VStack 并删除``` .frame(width: 50) .clipped() ``` 有效
  • 我就是.clipped
  • 你可以很容易地读出你的答案;-)

标签: swiftui picker


【解决方案1】:

这里找到了有效的解决方法 - 重新配置 UIPickerView(仍在内部使用)以全部压缩其内容(实际上我们尝试使用 .frame)。

使用 Xcode 13.4 / iOS 15.5 测试

extension UIPickerView {
    override open func didMoveToSuperview() {
        super.didMoveToSuperview()
        self.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
    }
}

Test module on GitHub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多