首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwiftUI ZStack对齐工作原理奇怪

SwiftUI ZStack对齐工作原理奇怪
EN

Stack Overflow用户
提问于 2022-03-10 07:25:17
回答 1查看 201关注 0票数 0

我用SwiftUI (包括ZStack )创建了非常简单的视图。

代码语言:javascript
复制
struct ContentView: View {
    var body: some View {
        ZStack(alignment: .topLeading) {
            Text("aaa")
                .frame(width: 50, height: 50)
                .font(.system(size: 20))
        }
        .frame(width: 142.0, height: 142.0)
        .background(.pink)
    }
}

我希望文本(“aaa”)会出现在粉红方格的顶部。

但结果却是这样。

更奇怪的是,如果我像这样在ZStack中添加“ZStack”,效果会很好。

代码语言:javascript
复制
struct ContentView: View {
    var body: some View {
        ZStack(alignment: .topLeading) {
            Color.clear
            Text("aaa")
                .frame(width: 50, height: 50)
                .font(.system(size: 20))
        }
        .frame(width: 142.0, height: 142.0)
        .background(.pink)
    }
}

结果是这样的。

我无法理解这种情况。SwiftUI完全疯了。

有人知道这件事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-10 10:07:21

ZStack的元素是根据最大的子的大小来布局和对齐的,而不是ZStack本身的框架。您应该考虑堆栈的“内容区域”与堆栈的框架分开。

添加Color.clear时,它的默认框架是无界的(高度和宽度为infinity),因此当它被添加到ZStack时,它将把“内容区域”扩大到最大可能的大小。这使得堆栈的内容区域与ZStack的框架大小相同。

通过使用具有显式无限边界的Spacer(),您可以获得相同的结果(更清晰的方式)。这将确保孩子们总是能得到同样的东西。

代码语言:javascript
复制
struct ContentView: View {
    var body: some View {
        ZStack(alignment: .topLeading) {
            Spacer()
                .frame(maxWidth: .infinity, maxHeight: .infinity)
            Text("aaa")
                .frame(width: 50, height: 50)
                .font(.system(size: 20))
        }
        .frame(width: 142.0, height: 142.0)
        .background(.pink)
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71420226

复制
相关文章

相似问题

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