这是查看代码:
struct ContentView: View {
var body: some View {
GeometryReader { geometry in
Color.blue
.frame(width: 50, height: 50)
}
}
}
我对这种情况下的布局流程的理解如下:
- 全屏尺寸提供给顶级 View ,即
GeometryReader
. -
GeometryReader
接受全额报价。 -
GeometryReader
继续将其完整尺寸提供给下一个 View ,在本例中是_ModifiedContent<Color, _FrameLayout>
类型的帧修改器。 . - 框架修饰符忽略提供的尺寸并声明其尺寸为 50x50,然后定位在
GeometryReader
的中心。 . - 框架修改器为其子级提供完整尺寸 (50x50),
Color.blue
. -
Color.blue
被动地接受它提供的内容,因此也声明自己是 50x50。
因此,蓝色方 block 的大小应该仅为 50x50。我知道 GeometryReader 占据了整个屏幕(我可以在它周围放置一个边框来验证),但蓝色应该只填充它周围的框架,该框架位于 50x50 的中间GeometryReader
。我缺少什么?或者这可能是一个错误。
最佳答案
事实证明,答案是这是一个错误。我更新到 Xcode 11 Beta 5,现在它的行为符合我的预期。
关于SwiftUI - 为什么 GeometryReader 导致 .frame() 修饰符不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57300617/