2017-10-11 5 views
6

J'adapte une application pour prendre en charge l'iPhone X. J'ai une extension de partage avec un contrôleur de vue personnalisé. J'ai besoin de connaître les incrustations de zone sécurisée de mon périphérique, mais la méthode safeAreaInsets de UIWindow fournie en appelant UIApplication.shared.keyWindow n'est pas disponible dans l'extension de partage car UIApplication.shared n'est pas visible. Existe-t-il un moyen de connaître les valeurs de la propriété safeAreaInsets dans mon extension de partage?Détecter des zones de sécurité sur l'extension de partage

Répondre

1

safeAreaInsets est une propriété de tout UIView; Vous pouvez l'utiliser dans votre extension de partage. Vous n'avez pas besoin de demander UIApplication.shared.keyWindow pour safeAreaInsets - en fait, vous ne voulez probablement pas faire cela, car si la keyWindow contient un UINavigationController ou un UITabBarController, ceux-ci affecteraient le safeAreaInsets.

Si vous avez une vue profonde dans la hiérarchie UIView, son safeAreaInsets sont calculées en regardant des vues ancêtres dans la hiérarchie, et voir si l'un d'entre eux ont safeAreaInsets qui se chevauchent avec votre point de vue.

Vous trouverez peut-être, cependant, que les safeAreaInsets sont d'abord UIEdgeInsets.zero - ce que vous voulez faire est de mettre en œuvre UIView.safeAreaInsetsDidChange() ou UIViewController.viewSafeAreaInsetsDidChange(), comme ceci:

public override func safeAreaInsetsDidChange() { 
    if #available(iOS 11.0, *) { 
     super.safeAreaInsetsDidChange() 
     self.setNeedsUpdateConstraints() // or self.setNeedsLayout, etc. 
    } 
}