首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwiftUI ZStack和GeometryReader

SwiftUI ZStack和GeometryReader
EN

Stack Overflow用户
提问于 2019-09-10 22:00:34
回答 1查看 2.6K关注 0票数 1

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

代码语言:javascript
复制
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)
    }
}

这非常有效,如下所示:

但是,如果我去掉定义带有帧的ZStack的位(.frame(width: 50, height: 50)),该行将占据整个屏幕,如下所示。为什么会这样呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-10 22:58:43

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

GeometryReader既可以水平扩展,也可以垂直扩展,就像VStack和HStack中的空格一样。

如果不限制ZStack的大小,ZStack将与GeometryReader一起增长。与HStack或VStack的增长方式一样,它们内部也有一个空格。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57872464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档