首页 > 解决方案 > GeometryReader 在提取视图时表现异常

问题描述

在此示例中,“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)
    }
}

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

标签: swiftuigeometryreader

解决方案


确认 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)
}

推荐阅读