2 votes

Présentation de PopoverViewController et problème de contrainte

Je tente d'invoquer une vue de présentation popover afin de partager une image sur un iPad, mais quand cela se produit, je reçois l'erreur 'unable to satisfy constraints'.

Le truc ici est que pour corriger cela, j'ai supprimé toutes les contraintes afin de recommencer, mais même sans contraintes j'obtiens la même erreur.

Donc ma question est : Est-ce un bug ou dois-je définir les contraintes pour la vue de présentation popover ?

Voici mon code :

print("Le périphérique actuel est un iPad")
print("Le périphérique actuel est \(UIDevice.current)")

if let imageCheck = image {
    let imageToShare = [imageCheck]
    let activityVC = UIActivityViewController(activityItems: imageToShare, applicationActivities: nil)

    activityVC.popoverPresentationController?.sourceView = super.view
    self.present(activityVC, animated: true, completion: nil)
}

Et l'erreur dans la console :

Le périphérique actuel est un iPad
Le périphérique actuel est 
2019-12-26 20:31:22.662290+0100 Petfie[2184:756367] [LayoutConstraints] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. 
    Try this: 
        (1) look at each constraint and try to figure out which you don't expect; 
        (2) find the code that added the unwanted constraint or constraints and fix it. 
(
    "",
    "",
    "",
    "",
    "",
    ""
)

Will attempt to recover by breaking constraint 

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in  may also be helpful.

6voto

ab1470 Points 61

J'ai juste résolu le même problème sur mon propre projet.

Lors de l'affichage d'un UIActivityViewController sur iPad, vous devez soit définir les propriétés sourceView ET sourceRect, soit définir la propriété barButtonItem.

Sur mon projet, j'ai résolu le problème en ajoutant le code suivant dans le bloc qui s'exécute lorsque le shareButton est tapé:

activityViewController.popoverPresentationController?.sourceView = self.view
activityViewController.popoverPresentationController?.sourceRect = shareButton.frame

Le sourceRect est le CGRect à partir duquel le UIActivityViewController "sort". La flèche sur le UIActivityViewController pointera vers le sourceRect.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X