我正在尝试使用 SwiftUI 重新创建我当前应用程序的 UI。而且这比我最初的难度要大得多。我想实现带有一些背景的卡片式单元格。我发现这List不支持,至少目前是这样。List是如此有限 - 它不允许您移除细胞分离器。
所以我搬到了ForEach里面ScrollView。我想这不应该用于长表的生产,但现在应该可以使用。我遇到的问题是ForeEach视图没有采用所有ScrollView提供的宽度。我可以设置.frame(...)修饰符,但这需要我绝对不想做的硬编码宽度。
任何想法如何强制VStack采用 ScrollView 的全宽?我试图使用ForeEach没有VStack与它有同样的问题。似乎ScrollView(父视图)“告诉”它的子视图(VStack)它的框架小于实际ScrollView的框架。并基于该信息子视图构建其布局和大小。
这是我目前的结果:

这是代码:
struct LandmarkList : View {
var body: some View {
NavigationView {
ScrollView() {
VStack {
Spacer().frame(height: 160)
ForEach(landmarkData) { landmark in
LandmarkRow(landmark: landmark).padding([.leading, .trailing], 16)
}
}.scaledToFill()
.background(Color.pink)
}
.background(Color.yellow)
.edgesIgnoringSafeArea(.all)
.navigationBarTitle(Text("Landmarks"))
}
}
}
struct LandmarkRow : View {
var landmark: Landmark …Run Code Online (Sandbox Code Playgroud)