无法使用 SwiftUI 使选取器居中

Posted

技术标签:

【中文标题】无法使用 SwiftUI 使选取器居中【英文标题】:Unable to center a Picker using SwiftUI 【发布时间】:2019-12-11 19:53:49 【问题描述】:

我正在尝试在 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)")
        
    

您会注意到我将选择器标签设置为 EmptyView,输出如下所示:

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

【问题讨论】:

【参考方案1】:

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

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

(credit)

【讨论】:

【参考方案2】:

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

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()
  

【讨论】:

最终使用它没有高度和没有剪裁,因为我认为最终结果更干净 - 但现在看起来好多了,谢谢!【参考方案3】:

你必须隐藏 PickerView 的标签。

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

【讨论】:

以上是关于无法使用 SwiftUI 使选取器居中的主要内容,如果未能解决你的问题,请参考以下文章

Xcode SwiftUI 按钮 - 无法居中

无法使此 CSS 动画居中

SwiftUI - 使用 CoreData 获取的结果来填充选取器

如何正确处理更新视图中的选取器(SwiftUI)

无法使用 Tailwindcss 使表单居中

无法使缩略图居中