我有一个循环显示所有MyView()元素:
HStack() {
ForEach(datastore.datacard) { data in
MyView()
}
}
但是我想在屏幕上每行最多包含4个MyView()项目,我列出了10个元素,但我不想使用ScrollView。我不知道,就像在每个4个元素上触发Hstack()一样?
有可能吗?
谢谢
有一个ForEach的初始化程序,采用Range:https://developer.apple.com/documentation/swiftui/foreach/3364099-init
ForEach(0..<4) { index in
MyView()
}
如果您需要访问ForEach内部datastore.datacard
中提供的数据,则可以通过索引访问数据:
ForEach(0..<(datastore.datacard.count < 4 ? datastore.datacard.count : 4)) { index in
MyView(self.datastore.datacard[index])
}
首先,您需要使用此扩展名将数据数组拆分为多个块:
extension Array {
func chunked(into size: Int) -> [[Element]] {
return stride(from: 0, to: count, by: size).map {
Array(self[$0 ..< Swift.min($0 + size, count)])
}
}
}
然后您可以设置数组大小:
let chunksResult = datastore.datacard.chunked(into: 4)
对于UI,请尝试此
VStack {
ForEach(chunksResult) { rowData in
HStack {
ForEach(rowData) { columnData in
MyView()
}
}
}
}
这是示例代码,需要在Xcode中进行测试,我只是编写代码以了解如何进行管理的线索