我正在调整一个应用程序以支持 iPhone X。我有一个带有自定义视图控制器的共享扩展。我需要知道我的设备的安全区域插图,但是通过调用提供的safeAreaInsets
方法在共享扩展中不可用,因为在那里不可见。有没有办法知道我的共享扩展中的属性值?UIWindow
UIApplication.shared.keyWindow
UIApplication.shared
safeAreaInsets
问问题
891 次
1 回答
7
safeAreaInsets
是任何 UIView 上的属性;您可以在您的共享扩展中使用它。您不需要要求UIApplication.shared.keyWindow
safeAreaInsets - 事实上,您可能不想这样做,因为如果 keyWindow 包含 aUINavigationController
或 a UITabBarController
,它们会影响 safeAreaInsets。
如果您的UIView
层次结构中有一个视图,它safeAreaInsets
的计算方法是查看层次结构中的祖先视图,并查看它们中是否有任何safeAreaInsets
与您的视图重叠。
但是,您可能会发现safeAreaInsets
最初是UIEdgeInsets.zero
- 您想要做的是实现UIView.safeAreaInsetsDidChange()
or UIViewController.viewSafeAreaInsetsDidChange()
,如下所示:
public override func safeAreaInsetsDidChange() {
if #available(iOS 11.0, *) {
super.safeAreaInsetsDidChange()
self.setNeedsUpdateConstraints() // or self.setNeedsLayout, etc.
}
}
于 2017-11-02T19:54:59.203 回答