GeometryReader
是一个通过闭包来构建视图的容器,可以返回一个 GeometryProxy
类型的结构体,它包含如下属性和方法,由此我们可以获取当前视图容器(即父视图)的尺寸和位置,绘制以其为参考坐标系的视图。
1 | var safeAreaInsets: EdgeInsets |
比如,我们需要绘制一个长宽均为父视图一半的矩形:
1 | struct ContentView: View { |
我们再来看看 GeometryProxy
包含的实例方法:func frame(in: CoordinateSpace) -> CGRect
,这里的 CoordinateSpace
是个枚举类型,有以下几种情况:
1 | case global // 参考系为屏幕 |
通过这个方法,我们可以获取到当前视图在不同参考系中的位置和尺寸,我们将代码改成如下:
1 | struct ContentView: View { |
运行模拟器 iPhone 12 Pro(safeAreaInsets: 47.0, 0.0, 34.0, 0.0),点击蓝色区域,控制台打印如下结果:
1 | screen: (0.0, 0.0, 390.0, 844.0) |
这与我们之前所说的枚举类型对应的坐标参考系是一致的。