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

标签 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. 全屏尺寸提供给顶级 View ,即 GeometryReader .
  2. GeometryReader接受全额报价。
  3. GeometryReader继续将其完整尺寸提供给下一个 View ,在本例中是 _ModifiedContent<Color, _FrameLayout> 类型的帧修改器。 .
  4. 框架修饰符忽略提供的尺寸并声明其尺寸为 50x50,然后定位在 GeometryReader 的中心。 .
  5. 框架修改器为其子级提供完整尺寸 (50x50),Color.blue .
  6. Color.blue被动地接受它提供的内容,因此也声明自己是 50x50。

因此,蓝色方 block 的大小应该仅为 50x50。我知道 GeometryReader 占据了整个屏幕(我可以在它周围放置一个边框来验证),但蓝色应该只填充它周围的框架,该框架位于 50x50 的中间GeometryReader 。我缺少什么?或者这可能是一个错误。

最佳答案

事实证明,答案是这是一个错误。我更新到 Xcode 11 Beta 5,现在它的行为符合我的预期。

关于SwiftUI - 为什么 GeometryReader 导致 .frame() 修饰符不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57300617/

相关文章:

ios - 我的 UIButton 的位置在所有模拟器中都不同

ios - 无法在 swift 3 的结构中获取返回值

swift - NSUnknownKeyException - Xcode

javascript - 使用 Three.js 生成正多边形

c++ - 查找点是否在几何内部

flash - ASC 2.0 是否识别 [Frame] 元数据标签(例如 : for Preloader factoryClass)?

iphone - 在 Xcode 中使用 AutoLayout 会禁用我的代码(动态地)工作?

ios - 以编程方式设置 Xcode 模拟器、键盘和 Touch ID 设置,用于 UI 测试

ios - Swift - 编码 URL

c++ - 计算多边形的最小面积矩形