我正在编写一个SwiftUI视图,以充当无限单元格网格的视口。我希望视图中显示的行数和列数取决于窗口的大小(这是一个Mac应用程序)。
当我用硬编码的行和列数(例如ForEach(0..<10)
)编写它时,它可以完美地工作。但是,当我切换为使用GeometryReader
计算行数和列数时,矩形消失了。
struct ContentView: View {
let cellSize: CGFloat = 40
var body: some View {
GeometryReader { geometry in
VStack {
ForEach(0..<Int(geometry.size.height / self.cellSize)) { _ in
HStack {
ForEach(0..<Int(geometry.size.width / self.cellSize)) { _ in
Rectangle()
.fill(Color.red)
}
}
}
}
}
}
}
答案 0 :(得分:0)
我认为问题出在常量ForEach
中(即,基于范围的构造函数)。如果要更改视图数,则应使用动态ForEach
。这是可能的解决方案。已通过Xcode 11.4 / macOS 10.15.5进行测试。
var body: some View {
GeometryReader { geometry in
VStack {
ForEach(Array(repeating: 0, count:
Int(geometry.size.height / self.cellSize)), id: \.self) { _ in
HStack {
ForEach(Array(repeating: 0, count:
Int(geometry.size.width / self.cellSize)), id: \.self) { _ in
Rectangle()
.fill(Color.red)
}
}
}
}
}
}