【问题标题】:Detect safe area insets on Share Extension检测共享扩展上的安全区域插图
【发布时间】:2017-10-11 09:51:18
【问题描述】:
我正在调整一个应用程序以支持 iPhone X。我有一个带有自定义视图控制器的共享扩展。我需要知道我的设备的安全区域插图,但是通过调用UIWindow 提供的safeAreaInsets 方法在共享扩展中不可用,因为UIApplication.shared 在那里不可见。
有没有办法知道我的共享扩展中 safeAreaInsets 属性的值?
【问题讨论】:
标签:
ios11
iphone-x
share-extension
safearealayoutguide
【解决方案1】:
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.
}
}