我正在 SwiftUI 中创建一个简单的视图,一个有一条线穿过它的盒子。这是(工作)代码:
struct DrawLine: View {
let boxSize = CGFloat(300.0)
var body: some View {
ZStack {
Rectangle()
.stroke(lineWidth: 2.0)
.fill(Color.purple)
.frame(width: self.boxSize, height: self.boxSize, alignment: .center)## Heading ##
GeometryReader { geometry in
Path { path in
path.move(to: CGPoint(x: 1, y: 1))
path.addLine(to: CGPoint(x: geometry.size.width - 1, y: geometry.size.height - 1))
}
.stroke(lineWidth: 2)
.fill(Color.orange)
}
}
.frame(width: 50, height: 50).border(Color.black)
}
}
Run Code Online (Sandbox Code Playgroud)
这很好用,如下所示:
但是,如果我用框架 ( .frame(width: 50, height: 50))取出定义 ZStack 的位,则该行会占据整个屏幕,如下所示。这是为什么?
GeometryReader 总是尽可能地增长。如果不受任何限制(即您的 ZStack frame()),则它会占据整个屏幕。这就是预期的行为。GeometryReader 正试图为它的后代提供尽可能多的东西。
GeometryReader 水平和垂直扩展,就像 Spacer 在 VStack 和 HStack 中所做的那样。
如果不限制 ZStack 的大小,ZStack 将随 GeometryReader 一起增长。与 HStack 或 VStack 增长的方式相同,其中包含 Spacer。
| 归档时间: |
|
| 查看次数: |
2387 次 |
| 最近记录: |