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
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.
}
}