繁体   English   中英

SwiftUI - ForEach 循环中的增量变量由于某种原因不起作用

[英]SwiftUI - Increment variable in a ForEach loop doesn't work for some reason

请帮忙。 我的ContentView有这个:

func makeView() -> Text{
    self.index += 1 // add one to this variable
    return Text("App")//Return a view
}

ForEach(0..<imageArray.count){ row in
 HStack{
  ForEach(0..<PartyCollectionViewCell.column){ column in
      self.makeView() // Call the function in the content view
      PartyCollectionViewCell(cellImg: imageArray[index+1]!) 
      }         //update the cell
  }
}

 

我想更新我在PartyCollectionViewCell(celling:imageArray[index+1]!) “index”变量以将一个添加到index变量。

我什至创建了如下所示的名为 makeview 的 func 来更新它,但它不起作用。

不是增加index ,而是根据rowcolumn索引计算索引。

如果您的数组包含 8 个图像并且您想要 2 列,那么您将有8/2 == 4行。 您的外循环应该遍历可以计算为imageArray.count/PartyCollectionViewCell.column的行数。

那么图像的索引将是row * PartyCollectionViewCell.column + column

func makeView() -> Text{
    return Text("App") //Return a view
}

ForEach(0..<(imageArray.count/PartyCollectionViewCell.column)) { row in
    HStack{
        ForEach(0..<PartyCollectionViewCell.column) { column in
            self.makeView() // Call the function in the content view
            PartyCollectionViewCell(cellImg: imageArray[row * PartyCollectionViewCell.column + column]!) 
        }         //update the cell
    }
}
// Handle partial row
if (imageArray.count % PartyCollectionViewCell.column > 0) {
    HStack {
        ForEach((imageArray.count/PartyCollectionViewCell.column)*PartyCollectionViewCell.column..<imageArray.count) { index in
            self.makeView()
            PartyCollectionViewCell(cellImg: imageArray[index]!) 
        }
        ForEach(0..<(PartyCollectionViewCell.column - imageArray.count % PartyCollectionViewCell.column)) { _ in
            EmptyView()
        } 
    }
}

如果您正在处理图像集合,我建议您使用:

struct ContentView: View {
    let data = (1...1000).map { "Item \($0)" }

    let columns = [
        GridItem(.adaptive(minimum: 80))
    ]

    var body: some View {
        ScrollView {
            LazyVGrid(columns: columns, spacing: 20) {
                ForEach(data, id: \.self) { item in
                    Text(item)
                }
            }
            .padding(.horizontal)
        }
    }
}

正如这里所写。 如果您使用目标 iOS13,您还可以在链接中找到解决方案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM