也对此进行了描述,但未在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
中进行操作时,您将看到该视图为非零值并设置了有效的插图。