繁体   English   中英

当 window 使用 GeometryReader 调整大小时,调整 SwiftUI 中矩形网格的大小

[英]Resizing grid of rectangles in SwiftUI when window resizes using GeometryReader

我正在编写一个 SwiftUI 视图来充当无限单元格网格的视口。 我希望视图中显示的行数和列数取决于 window(这是一个 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)
                        }
                    }
                }
            }
        }
    }
}

我认为问题出在常量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)
                    }
                }
            }
        }
    }
}

暂无
暂无

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

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