检测共享扩展上的安全区域插入

时间:2017-10-11 09:51:18

标签: ios11 iphone-x share-extension safearealayoutguide

我正在调整应用以支持iPhone X.我有一个带有自定义视图控制器的共享扩展。我需要知道设备的安全区域内容,但是通过调用safeAreaInsets提供的UIWindow方法在共享扩展程序中不可用,因为UIApplication.shared.keyWindow在那里看不到。 有没有办法知道我的共享扩展中UIApplication.shared属性的值?

1 个答案:

答案 0 :(得分:2)

safeAreaInsets是任何UIView的财产;您可以在共享扩展中使用它。您不需要向UIApplication.shared.keyWindow询问safeAreaInsets - 实际上,您可能不希望这样做,因为如果keyWindow包含UINavigationControllerUITabBarController,则会影响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.
    }
}