GeometryReader 对提取的视图表现异常

GeometryReader behaves oddly with an extracted view

在此示例中,“hello”文本如预期一样放置在屏幕中间。

struct ContentView: View {
    var body: some View {
        GeometryReader { geo in
            Text("hello")
                .background(Color.green)
        }
        .background(Color.blue)
    }
}

但是当我 Text 移动到提取的视图时,“你好”文本移动到屏幕的左上角。

struct ContentView: View {
    var body: some View {
        GeometryReader { geo in
            ExtractedView()
        }
        .background(Color.blue)
    }
}

struct ExtractedView: View {
    var body: some View {
        Text("hello")
            .background(Color.green)
    }
}

这是错误还是我不理解的预期行为?

确认 Xcode 12 / iOS 14 的左上角位置。我不认为这是一个错误。实际上,GeometryReader 不是一个容器并且没有(不应该)有自己的默认对齐方式,它的目的是自定义对齐方式,所以我们在这里。

可能的解决方案(使用 Xcode 12b3 / iOS 14 测试):

  1. 按位置排列
GeometryReader { geo in
    ExtractedView()
        .position(x: geo.size.width / 2, y: geo.size.height / 2)
}
  1. 包装成全尺寸堆栈容器(具有默认对齐方式)
GeometryReader { geo in
    VStack {
        ExtractedView()
    }
    .frame(maxWidth: .infinity, maxHeight: .infinity)
}