如何获得Swift UI的水平选择器?

时间:2020-05-22 23:18:34

标签: swiftui

是否存在用于在Swift UI中获得水平选择器的现有解决方案?

Swift示例:https://github.com/akkyie/AKPickerView-Swift

2 个答案:

答案 0 :(得分:1)

您可以在选取器和选取器的内容上使用旋转效果。确保将内容与选择器相对旋转90度,否则内容将侧身。如果选择器太大,则可以使用frame(height: _)手动设置选择器的高度。就我而言,我使用了frame(maxHeight: _)。调整大小后,您可能需要使用clipped()来调整行指示器,以防止行指示器流出选择器。

我以图像为例,但它应该适用于大多数(即使不是全部)基本视图。

代码:

Picker(selection: $data, label: Text("Data")) {
    ForEach(dataArray, id: \.self) { imageName in
        Image(imageName)
        .resizable()
        .scaledToFit()
        .rotationEffect(Angle(degrees: 90))
    }
}
.labelsHidden()
.rotationEffect(Angle(degrees: -90))
.frame(maxHeight: 100)
.clipped()

答案 1 :(得分:0)

我最终使用水平滚动视图,点击手势和状态来跟踪选择来解决此问题。

@State private var index

var body: some View {

        return ScrollView(.horizontal, showsIndicators: false) {
            HStack {
                ForEach(0..<self.items.count, id: \.self) { i in
                    Text("\(i)")
                        .foregroundColor(self.index == i ? .red : .black)
                        .frame(width: 20, height: 20)
                        .gesture(TapGesture().onEnded({ self.index = i }))
                }
            }
        }
        .frame(width: self.width, alignment: .leading)
}