0

我正在尝试将我的Picker隐藏标签值与TextField表单中的另一个值对齐(见附图)。在显示的选择器值中删除8px填充的最佳方法是什么?

import SwiftUI

struct ContactFormView: View {
  
  var countries = ["Malaysia", "Singapore", "Japan"]
  
  @State var name: String = ""
  @State var mobile: String = ""
  @State var mobileCountry: String = "Malaysia"
  
  var body: some View {
    NavigationView {
      Form {
        Section(header: Text("Details")) {
          TextField("Name", text: $name)
            .border(Color.red, width: 1)
          HStack {
            Picker(selection: $mobileCountry, label: EmptyView()) {
              ForEach(countries, id: \.self) {
                Text($0).border(Color.red)
              }
            }
              .scaledToFit()
              .labelsHidden()
              .border(Color.red, width: 1)
            TextField("Mobile", text: $mobile)
              .border(Color.red, width: 1)
          }
        }
      }
      .navigationBarTitle("New contact")
    }
  }
}

左对齐选择器值

4

1 回答 1

2

可能你最好的选择是在你的选择器上使用负填充:

Picker(selection: $mobileCountry, label: EmptyView()) {
              ForEach(countries, id: \.self) {
                Text($0).border(Color.red)
              }
            }
              .scaledToFit()
              .labelsHidden()
              .border(Color.red, width: 1)
              .padding(.horizontal, -8)

在 Xcode 12.5 中加载您的代码,添加负填充以您想要的方式对齐文本。

直觉上,我会选择.padding(.leading, -8)仅删除 Picker 前缘的填充 - 但这样做时,picker 和文本字段之间的差距会变得更大。

对两个水平值应用负填充使我的差距保持不变。但我建议在你的代码中尝试两者,看看哪一个对你最有意义。

于 2021-05-06T05:55:38.660 回答