SwiftUI中存在一些隐式的HStack,写起来比较方便。有时会懒得写HStack。大多数情况写不写效果是一样的。不过也有些时候会有怪异的表现。
因为文档没有清楚说明,也没有源码,所以说不清到底是什么原因,只是做个记录。或许有人也遇到类似的情况,可以避坑。
swift
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,也能运行,大致情况也不差。看效果。

swift
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,看效果。

可以看出,同样是Spacer,在隐式HStack中,它的固定宽度比显式中的大。并且不能通过设置小一点的minLength来缩小这个固定的宽度。Spacer(minLength: 2),这样写也是没用的。
不知道具体的原因。反正偷懒时如果遇到怪异的表现,还是老老实实把HStack给补上。