0

我知道这GeometryReader会占用所有可用空间

但是为什么他们将他们的内容(子视图)锚定到 topLeading 角落?

这是我的代码

struct ContentView: View {
    var body: some View {
        VStack {
            GeometryReader { proxy in
                Text("First Stack")
                .foregroundColor(.black)
                .font(.largeTitle)
            }
            .background(Color.red.opacity(0.4))
            Text("Second Stack").background(Color.blue)
        }
        .background(Color.yellow.opacity(0.5))
    }
}

结果是这样的

在此处输入图像描述

Text有自己的大小,但为什么它锚定或对齐 topLeading

这是默认行为GeometryReader吗?

我试着让它GeometryReader像这样居中

struct ContentView: View {
    var body: some View {
        VStack {
            GeometryReader { proxy in
                Text("First Stack")
                .position(x: proxy.frame(in: .local).midX, y: proxy.frame(in: .local).midY)
                .foregroundColor(.black)
                .font(.largeTitle)
            }
            .background(Color.red.opacity(0.4))
            Text("Second Stack").background(Color.blue)
        }
        .background(Color.yellow.opacity(0.5))
    }
}

在此处输入图像描述

Text是中心的正确解决方案GeometryReader吗?

4

1 回答 1

1

呃,看到这个我很惊讶。实际上,在 Xcode 11.4 中,默认对齐方式GeometryReader.center,但是在 Xcode 12 beta 3 中,默认对齐方式看起来top-leading

我还没有看到任何相关信息。但是我可以建议包装TextVStackorHStack并提供来自proxy. 当然,在我看来,它将提供更好的布局组织。

struct ContentView: View {
var body: some View {
    VStack {
        GeometryReader { proxy in
            VStack {
                Text("First Stack")
                    .foregroundColor(.black)
                    .font(.largeTitle)
            }
            .frame(width: proxy.size.width, height: proxy.size.height, alignment: .center)
        }
        .background(Color.red.opacity(0.4))
        Text("Second Stack").background(Color.blue)
    }
    .background(Color.yellow.opacity(0.5))
} }
于 2020-07-24T01:01:25.220 回答