我正在尝试GridView
按照这个SwiftUi GridView iOS 13教程在 SwiftUi 中构建一个。
我ForEach()
以嵌套方式使用两个,一个用于显示行,另一个用于显示GridView
.
我的问题是嵌套ForEach()
的调用次数超出了预期。虽然这会创建一个准确GridView
但它需要很多时间(6-8 秒)。我也在GridView
里面使用它,TabView
所以当我在页面之间滑动时,页面之间TabView
有明显的可见延迟(每个页面都包含一个 GridView,并且网格中的元素数量有所不同)。
这是ForEach
用于创建GridView
.
private let columns: Int
private var list: [[T]] = []
private let content: (T) -> Content
init(columns: Int, list: [T], @ViewBuilder content:@escaping (T) -> Content) {
self.columns = columns
self.content = content
self.setupList(list)
}
private mutating func setupList(_ list: [T]) {
var column = 0
var columnIndex = 0
for object in list {
if columnIndex < self.columns {
if columnIndex == 0 {
self.list.insert([object], at: column)
columnIndex += 1
}else {
self.list[column].append(object)
columnIndex += 1
}
}else {
column += 1
self.list.insert([object], at: column)
columnIndex = 1
}
}
}
var body: some View {
VStack {
ForEach(0 ..< self.list.count, id: \.self) { i in
Group{
HStack {
ForEach(self.list[i], id: \.self) { object in
self.content(object)
.frame(width: UIScreen.main.bounds.size.width/CGFloat(self.columns))
}
}
}
}
}
}
对于具有 3 行和 3 列的 9 个元素的网格,第二个内部的语句ForEach
在每行中被调用 9 次,而每行只应该调用 3 次。
我在这里尝试了建议的答案Nested ForEach (and List) in Views 给出了意想不到的结果(用一个组将外部 ForEach 内的视图封闭),但是错误仍然存在。
根据 Nested ForEach 的建议,我还尝试id
为两者制作唯一的,导致意外订购,但我仍然无法解决它。ForEach