2017-10-11 38 views
6

我正在修改應用程序以支持iPhone X.我有一個自定義視圖控制器的共享擴展。我需要知道設備的安全區域插頁,但撥打UIApplication.shared.keyWindow提供的UIWindowsafeAreaInsets方法在共享分機上不可用,因爲UIApplication.shared在此處不可見。 有沒有辦法在我的Share Extension中知道safeAreaInsets屬性的值?檢測共享擴展上的安全區域插入

回答

1

safeAreaInsets是任何UIView上的屬性;你可以在你的共享分機中使用它。您無需爲safeAreaInsets詢問UIApplication.shared.keyWindow - 事實上,您可能不希望這樣做,因爲如果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. 
    } 
}