簡體   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