SwiftUI ZStack和GeometryReader
我在SwiftUI中创建了一个简单的视图,一个框中有一条线穿过它。以下是(工作)代码: 这非常有效,如下所示: 但是,如果我用一个frame(SwiftUI ZStack和GeometryReader,swiftui,Swiftui,我在SwiftUI中创建了一个简单的视图,一个框中有一条线穿过它。以下是(工作)代码: 这非常有效,如下所示: 但是,如果我用一个frame(.frame(宽度:50,高度:50))取出定义ZStack的位,该行将占据整个屏幕,如下所示。为什么呢 GeometryReader总是尽可能地增长。如果不受任何限制(例如,ZStack frame()),则它将占据整个屏幕。这是预期的行为。GeometryReader正试图将尽可能多的信息传递给它的后代 GeometryReader在水平和垂直方向上
.frame(宽度:50,高度:50)
)取出定义ZStack的位,该行将占据整个屏幕,如下所示。为什么呢
GeometryReader总是尽可能地增长。如果不受任何限制(例如,ZStack frame()),则它将占据整个屏幕。这是预期的行为。GeometryReader正试图将尽可能多的信息传递给它的后代 GeometryReader在水平和垂直方向上都会展开,就像间隔棒在VStack和HStack中一样
如果不限制ZStack的大小,ZStack将随GeometryReader一起增长。与HStack或VStack的生长方式相同,它们内部有一个间隔层。GeometryReader总是尽可能多地生长。如果不受任何限制(例如,ZStack frame()),则它将占据整个屏幕。这是预期的行为。GeometryReader正试图将尽可能多的信息传递给它的后代 GeometryReader在水平和垂直方向上都会展开,就像间隔棒在VStack和HStack中一样 如果不限制ZStack的大小,ZStack将随GeometryReader一起增长。与HStack或VStack的生长方式相同,它们内部有一个间隔物
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)
}
}