是否存在用于在Swift UI中获得水平选择器的现有解决方案?
答案 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)
}