简单地说,我想使用Swift代码获取这个蓝色矩形的边界:
该矩形的坐标在尺寸检查器中可见:
在Xcode中一个空的App项目中,我尝试使用view.safeAreaLayoutGuide.layoutFrame
获取CGRect,但是此属性似乎包含整个视图的边界,而不是安全区域。具体来说,它返回0.0
,0.0
,896.0
和{{1}的414.0
,minX
,minY
和width
}。
我也尝试获取height
的{{1}},top
,bottom
和left
属性,但是对于每个属性返回0
如果顶部还有另一个视图,我还尝试获取right
,但是它返回了view.safeAreaInsets
。
所有这些值都来自iPhone11。我正在使用Xcode 12。
答案 0 :(得分:1)
首先,获取安全区域插图。 (等到您知道它们之前,再等他们。)好吧,它们是从哪儿插入的?视图控制器的视图。因此,只需将这些插图 apply 应用于视图控制器的视图边界,即可获得矩形的矩形(在视图坐标中)。
所以,我相信这是您要寻找的矩形?
我是怎么做到的:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
for v in self.view.subviews {
v.removeFromSuperview()
}
let v = UIView()
v.backgroundColor = .blue
self.view.addSubview(v)
// okay, ready? here we go ...
let r = self.view.bounds.inset(by:self.view.safeAreaInsets) // *
v.frame = r
}
请记住,矩形r
在视图坐标中。如果需要在其他坐标系中使用rect,则可以调用一些坐标转换方法。