无法使用 SwiftUI 将 Picker 居中

Qui*_*inn 7 ios swift swiftui

我正在尝试在 SwiftUI 中制作一个选择器,并且在功能上运行良好。但无论出于何种原因,它将标题挤压到选择器的左侧,但我只想选择器在视图中居中。

这是我的代码:

import SwiftUI

struct FancyPicker: View {
    let name: String
    let options: [String]
    let doneText = "Done"
    let onSelection: (String)->Void

    @State private var selection = 0

    var body: some View {
        VStack {
            HStack {
                Text(name)
                Spacer()
                Button(action: {
                    self.onSelection(self.options[self.selection])
                }, label: {
                    Text(doneText)
                })
            }.padding()

            Picker(selection: $selection, label: EmptyView()) {
                ForEach(0 ..< options.count) { index in
                    Text(self.options[index]).tag(index)
                }
            }
        }
    }
}

struct FancyPicker_Previews: PreviewProvider {
    static var previews: some View {
        FancyPicker(name: "Test Picker", options: ["One", "Two", "Three"]) { selection in
            print("Selected \(selection)")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您会注意到我将选择器标签设置为 an EmptyView,这是输出的样子:

丑陋的选择器视图

有没有办法摆脱左侧的丑陋填充?选择器上方和下方还有额外的丑陋填充物,但我可以改天担心...

小智 9

使用.labelsHidden()隐藏选取器的标签。

即使标签是隐藏的,我还是建议添加一个描述性标签,以便屏幕阅读器可以使用该标签。

信用


Rol*_*tte 5

您必须隐藏标签才能使选择器居中。您还可以编辑高度并将其剪辑以具有自定义选取器高度。

var body: some View {
  VStack {

    Picker(selection: $selection, label: Text("") {
      ForEach(0 ..< options.count) {
        Text(self.options[$0]).tag($0)
      }
    }
    .labelsHidden()
    .frame(height: 50)
    .clipped()
  }
}
Run Code Online (Sandbox Code Playgroud)