我有一个具有两个列表的SwiftUI GUI,这些列表堆叠在彼此上方。每个列表都有可变数量的项目。我希望两个列表都能缩小以适应它们的内容。
如果我在ForEach周围使用VStack,简单情况下可以实现(请参见下面的示例)。底部附近有一个间隔器,因此列表会像我所期望的那样移动到窗口的顶部。
现在,有时列表很大,我想要一个Scroll view和最大高度,但是当它的项较少时,我仍然希望列表缩小。但是,一旦我添加了Scroll view,Scroll view就开始占用所有可能的空间。如果我分配了一个最大值,那么它就不再缩小以适应其内容。
在下面的示例中(如所写),我得到了我想要的调整大小行为(没有最大尺寸)。如果我取消注释Scroll view,则它会占用所有空间;如果我取消注释frame modifier,则它可以工作,但大小是固定的。
struct ContentView: View {
@State var List1: [String] = [ ]
@State var List2: [String] = [ ]
var body: some View {
VStack {
Button("1-5") {
List1=[ "1" ]
List2=[ "a", "b", "c", "d", "e" ]
}
Button("3-3") {
List1=[ "1", "2", "3" ]
List2=[ "a", "b", "c" ]
}
Button("5-1") {
List1=[ "1", "2", "3", "4", "5" ]
List2=[ "a" ]
}
//ScrollView {
VStack {
ForEach(List1.indices, id: \.self) { idx in
Text(List1[idx])
}
}
//}
//.frame(maxHeight: 40)
Text("middle")
VStack {
ForEach(List2.indices, id: \.self) { idx in
Text(List2[idx])
}
}
Spacer()
Text("last")
}
}
}