GeometryReader在提取的视图中表现异常

时间:2020-07-28 22:42:56

标签: swiftui geometryreader

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

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

但是当我将Text移至提取视图时,“ hello”文本将移至屏幕的左上角。

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

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

1 个答案:

答案 0 :(得分:1)

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