safeAreaInsets在viewDidLoad中返回错误的值,哪里是获取它的最佳位置?

时间:2017-09-19 01:20:36

标签: ios ios11 iphone-x

当我尝试在视图控制器中检索viewDidLoad中的safeAreaInsets时,它会在iPhone X上返回(0,0,0,0),我知道这是错误的。文档说如果视图不是层次结构的一部分或视图不可见,则会发生这种情况。所以我的问题是,检索safeAreaInsets然后使用这些插图布局我的子视图的最佳位置在哪里?

2 个答案:

答案 0 :(得分:16)

您需要使用viewDidLayoutSubviews代替viewDidLoad

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    // your layout code here
}

注意:与仅被调用一次的viewDidLoad不同,viewDidLayoutSubviews通常被多次调用。确保仅在viewDidLayoutSubviews内设置框架,并且不执行仅发生一次的操作,例如添加子视图。

答案 1 :(得分:0)

我有一个自定义视图,它是滚动视图的内容视图,使用drawrect绘制UI。 内容视图是根据其大小绘制的,因此我需要在drawrect函数中获得安全区域宽度。 事实证明,我无法正确获得safeAreaInsets,即使我把它放在layoutsubviews中也总是返回零。 我终于找到了答案,我可以通过UIApplication.shared.keyWindow成功获得safeAreaInsets。

这是我的解决方案

this.input.value