SwiftUI中存在一些隐式的HStack,写起来比较便利。有时会懒得写HStack。大多数状况写不写作用是一样的。不过也有些时候会有奇怪的体现。

因为文档没有清楚阐明,也没有源码,所以说不清到底是什么原因,仅仅做个记载。或许有人也遇到相似的状况,可以避坑。

struct ContentView: View {
  let string = "这是一段测验代码"
  var body: some View {
    NavigationView {
      List {
        NavigationLink {
          Text(string)
        } label: {
          Text(string)
          Spacer()
          Text("(string.count)字")
        }
      }
      .listStyle(.sidebar)
      .padding()
    }
  }
}

这儿的label是隐式的HStack,也能运转,大致状况也不差。看作用。

隐式HStack的奇怪体现

struct ContentView: View {
  let string = "这是一段测验代码"
  var body: some View {
    NavigationView {
      List {
        NavigationLink {
          Text(string)
        } label: {
          HStack {
            Text(string)
            Spacer()
            Text("(string.count)字")
          }
        }
      }
      .listStyle(.sidebar)
      .padding()
    }
  }
}

这儿的label是显式写出的HStack,看作用。

隐式HStack的奇怪体现

可以看出,同样是Spacer,在隐式HStack中,它的固定宽度比显式中的大。而且不能通过设置小一点的minLength来缩小这个固定的宽度。Spacer(minLength: 2),这样写也是没用的。

不知道具体的原因。横竖偷懒时如果遇到奇怪的体现,仍是老老实实把HStack给补上。