【问题标题】:SwiftUI ZStack and GeometryReaderSwiftUI ZStack 和 GeometryReader
【发布时间】:2019-09-10 14:00:34
【问题描述】:

我正在 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)
    }
}

效果很好,如下所示:

但是,如果我用框架 (.frame(width: 50, height: 50)) 取出定义 ZStack 的位,则该行将占据整个屏幕,如下所示。这是为什么呢?

【问题讨论】:

    标签: swiftui


    【解决方案1】:

    GeometryReader 总是尽可能地增长。如果不受任何限制(即您的 ZStack frame()),那么它会占据整个屏幕。这是预期的行为。 GeometryReader 试图尽可能多地给它的后代。

    GeometryReader 可以水平和垂直扩展,就像 Spacer 在 VStack 和 HStack 中所做的那样。

    如果不限制 ZStack 的大小,ZStack 将随着 GeometryReader 一起增长。与 HStack 或 VStack 的增长方式相同,其中包含 Spacer。

    【讨论】:

      猜你喜欢
      • 2020-07-28
      • 2020-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多