我正在调整应用以支持iPhone X.我有一个带有自定义视图控制器的共享扩展。我需要知道设备的安全区域内容,但是通过调用safeAreaInsets
提供的UIWindow
方法在共享扩展程序中不可用,因为UIApplication.shared.keyWindow
在那里看不到。
有没有办法知道我的共享扩展中UIApplication.shared
属性的值?
答案 0 :(得分:2)
safeAreaInsets
是任何UIView的财产;您可以在共享扩展中使用它。您不需要向UIApplication.shared.keyWindow
询问safeAreaInsets - 实际上,您可能不希望这样做,因为如果keyWindow包含UINavigationController
或UITabBarController
,则会影响safeAreaInsets。
如果您的UIView
层次结构中有深入视图,则会通过查看层次结构中的祖先视图并查看其中是否有任何与safeAreaInsets
重叠的视图来计算其safeAreaInsets
你的观点。
但是,您可能会发现safeAreaInsets
最初是UIEdgeInsets.zero
- 您要做的是实施UIView.safeAreaInsetsDidChange()
或UIViewController.viewSafeAreaInsetsDidChange()
,如下所示:
public override func safeAreaInsetsDidChange() {
if #available(iOS 11.0, *) {
super.safeAreaInsetsDidChange()
self.setNeedsUpdateConstraints() // or self.setNeedsLayout, etc.
}
}