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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...