2017-10-11 26 views
6

iPhone Xをサポートするようにアプリを調整しています。私はカスタムビューコントローラを共有する拡張機能を持っています。デバイスの安全領域のインセットを知っておく必要がありますが、safeAreaInsetsメソッドUIWindowUIApplication.shared.keyWindow)は、UIApplication.sharedが表示されないため共有エクステンションでは利用できません。 共有エクステンションのsafeAreaInsetsプロパティの値を知る方法はありますか?シェアエクステンションのセーフエリアのインセットを検出する

答えて

1

safeAreaInsetsは、任意のUIViewのプロパティです。それをあなたのShare Extensionで使うことができます。実際には、keyWindowにUINavigationControllerまたはUITabBarControllerが含まれていると、safeAreaInsetsに影響するため、safeAreaInsetsにはUIApplication.shared.keyWindowを尋ねる必要はありません。

あなた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. 
    } 
} 
関連する問題