0

我正在尝试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

4

0 回答 0