Contraintes pour centrer un button lorsque l'autre est masqué

J'ai deux buttons sur un controller de vue. Ils sont égaux en hauteur et en largeur et bien espacés, centrés sur l'écran. Le problème est que dans certaines circonstances, l'un des buttons est caché. Quand l'un des buttons est caché, je veux que l'autre button soit centré.

Pour la vie de moi, je n'ai pas été capable de comprendre comment configurer les contraintes pour que cela se produise.

Je suis capable de déplacer le button visible de façon à ce qu'il soit centré si l'autre button est caché, mais cela ne peut sembler faire qu'après le chargement de la vue, ce qui fait que le button "saute" et a l'air idiot.

Intégrez les deux buttons dans un UIStackView :

et ajustez ses parameters à vos besoins:

entrez la description de l'image ici


Résultat avec button1 caché == false (non coché):

Button1 caché == false (non coché)

Résultat avec button1 caché == vrai (coché):

Button1 caché == vrai (coché

Si vous êtes en mesure d'get le button dans la bonne position, essayez de l'animer pour lui donner un bel effet. Notez que ceci n'anime que les changements de contraintes, donc si vous faites quelque chose d'autre pour faire bouger le button, cela pourrait ne pas fonctionner.

 UIView.animate(withDuration: 0.5, animations: { //do whatever you're doing to make the button 'jump' to the right position here self.view.layoutIfNeeded() }) 

Les contraintes de storyboard comme celle-ci ne sont pas censées bouger, et vous pouvez causer beaucoup de problèmes d'interface user en ne le faisant pas correctement.

Ma recommandation? Ce n'est pas idéal, mais ajoutez simplement un troisième button. Si vous devez masquer le button, masquer les deux et afficher le troisième.