【发布时间】:2021-05-27 14:01:15
【问题描述】:
我正在尝试在 SwiftUI 中创建一个新的网格结构来显示具有可变高度的卡片。在这个程度上,我在HStack 中使用了几个LazyVStacks,并且有条件以正确的顺序显示我的数据项。这个视图单独工作,使列数适应屏幕的大小,但是当在ScrollView 中使用它时,它的大小计算不正确,以下视图最终位于网格下方而不是网格下方。这是我用于网格的代码:
struct StaggeredGrid<Element, Content>: View where Content: View {
var preferredItemWidth: CGFloat
var data: [Element] = []
var content: (Element) -> Content
init(preferredItemWidth: CGFloat, data: [Element], @ViewBuilder content: @escaping (Element) -> Content) {
self.preferredItemWidth = preferredItemWidth
self.data = data
self.content = content
}
var body: some View {
GeometryReader { geometry in
HStack(alignment: .top, spacing: 20) {
ForEach(1...Int(geometry.size.width / preferredItemWidth), id: \.self) { number in
LazyVStack(spacing: 20) {
ForEach(0..<data.count, id: \.self) { index in
if (index+1) % Int(geometry.size.width / preferredItemWidth) == number % Int(geometry.size.width / preferredItemWidth) {
content(data[index])
}
}
}
}
}
.padding([.horizontal])
}
}
}
以及显示行为的预览:
struct StaggeredGrid_Previews: PreviewProvider {
static var previews: some View {
ScrollView {
VStack {
StaggeredGrid(preferredItemWidth: 160, data: (1...10).map{"Item \($0)"}) { item in
Text(item)
.foregroundColor(.blue)
}
Text("I should be below the grid")
}
}
}
}
这是预览图: Wrong appearance in a ScrollView
还有一张ScrollView被注释掉的图片:
Expected behavior, ScrollView removed
提前感谢您提供有关我不理解的这种行为的任何帮助或线索。
【问题讨论】:
标签: swiftui swiftui-list swiftui-view