SwiftUI-为什么GeometryReader导致.frame()修饰符不起作用?

时间:2019-08-01 01:04:39

标签: swift geometry frame swiftui

这是查看代码:

struct ContentView: View {
    var body: some View {
        GeometryReader { geometry in
            Color.blue
                .frame(width: 50, height: 50)
        }
    }
}

expected-result
预期结果
actual-result
实际结果

在这种情况下,我对布局过程的理解如下:

  1. 全屏尺寸提供给顶级视图,即GeometryReader
  2. GeometryReader接受全部报价。
  3. GeometryReader继续向下一个视图提供其完整尺寸,在这种情况下为_ModifiedContent<Color, _FrameLayout>类型的帧修饰符。
  4. 帧修饰符忽略提供的尺寸,并声明其尺寸为50x50,然后位于GeometryReader的中心。
  5. 帧修改器为其子Color.blue提供其完整尺寸(50x50)。
  6. Color.blue被动接受所提供的内容,因此也声明自己为50x50。

因此,蓝色方块应仅为50x50。我知道 GeometryReader 占据了整个屏幕(我可以在其周围放置边框以进行验证),但是蓝色应该只填充包围它的框架,该框架的50x50位于GeometryReader。我想念什么?也许这是一个错误。

1 个答案:

答案 0 :(得分:0)

原来,答案是那是个错误。我更新到Xcode 11 Beta 5,它现在的行为符合我的预期。