如何在iOS 14中以编程方式获取视图的安全区域坐标?

时间:2020-09-27 01:14:24

标签: ios swift xcode

简单地说,我想使用Swift代码获取这个蓝色矩形的边界:

enter image description here

该矩形的坐标在尺寸检查器中可见:

enter image description here

在Xcode中一个空的App项目中,我尝试使用view.safeAreaLayoutGuide.layoutFrame获取CGRect,但是此属性似乎包含整个视图的边界,而不是安全区域。具体来说,它返回0.00.0896.0和{{1}的414.0minXminYwidth }。

我也尝试获取height的{​​{1}},topbottomleft属性,但是对于每个属性返回0

如果顶部还有另一个视图,我还尝试获取right,但是它返回了view.safeAreaInsets

所有这些值都来自iPhone11。我正在使用Xcode 12。

1 个答案:

答案 0 :(得分:1)

首先,获取安全区域插图。 (等到您知道它们之前,再等他们。)好吧,它们是从哪儿插入的?视图控制器的视图。因此,只需将这些插图 apply 应用于视图控制器的视图边界,即可获得矩形的矩形(在视图坐标中)。

所以,我相信这是您要寻找的矩形?

enter image description here

我是怎么做到的:

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,则可以调用一些坐标转换方法。