如何解决SwiftUi Nested ForEach 导致相同视图的意外呈现
我正在尝试按照此 SwiftUi GridView iOS 13 教程在 SwiftUi 中构建一个 GridView
。
我以嵌套方式使用两个 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 give unexpected results(用一个组将视图封闭在外部 ForEach 中),但是错误仍然存在。
根据 Nested ForEach caused unexpected ordering 的建议,我还尝试为 id
设置唯一的 ForEach
,但我仍然无法解决。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。