也对此进行了描述,但未在Why does this iPhone X UIView not get safeAreaLayoutGuide?中回答

我创建了一个全新的从零开始的单视图Universal iOS应用,并将仅这三行代码添加到viewDidLoad()中。我以纵向模式启动iPhone X Simulator。这是我得到的:

let safeSize = view.safeAreaLayoutGuide.layoutFrame.size
// Returns (375.0, 812.0) — why full size?

let window = UIApplication.shared.delegate!.window!!
let safeSize2 = window.safeAreaLayoutGuide.layoutFrame.size
// Returns (375.0, 734.0) — this is what I expected.


为什么根视图控制器的根视图不返回预期的安全区域?

最佳答案

SafeAreaInsets:


  您可以通过应用此中的插图来获得视图的安全区域
  视图边界矩形的属性。如果该视图当前不是
  安装在视图层次结构中或在屏幕上尚不可见,
  此属性的边插入为0。


SafeAreaLayoutGuide也是如此:


  当视图在屏幕上可见时,本指南将反映
  导航栏,标签栏,工具栏未涵盖的视图,
  和其他祖先的观点。


因此,由于视图尚未在viewDidLoad中布置或可见,因此该视图为0。在viewDidLayoutSubviews中进行操作时,您将看到该视图为非零值并设置了有效的插图。

09-07 12:07