SwiftUI ZStack和GeometryReader

SwiftUI ZStack和GeometryReader,swiftui,Swiftui,我在SwiftUI中创建了一个简单的视图,一个框中有一条线穿过它。以下是(工作)代码: 这非常有效,如下所示: 但是,如果我用一个frame(.frame(宽度:50,高度:50))取出定义ZStack的位,该行将占据整个屏幕,如下所示。为什么呢 GeometryReader总是尽可能地增长。如果不受任何限制(例如,ZStack frame()),则它将占据整个屏幕。这是预期的行为。GeometryReader正试图将尽可能多的信息传递给它的后代 GeometryReader在水平和垂直方向上

我在SwiftUI中创建了一个简单的视图,一个框中有一条线穿过它。以下是(工作)代码:

这非常有效,如下所示:

但是,如果我用一个frame(
.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)
    }
}