J'ai l'impression que c'est un paradigme assez courant de montrer / cacher UIViews
, le plus souvent UILabels
, en fonction de la logique métier. Ma question est de savoir quelle est la meilleure façon d'utiliser AutoLayout pour répondre aux vues cachées comme si leur cadre était 0x0. Voici un exemple de liste dynamique de 1 à 3 fonctionnalités.
À l'heure actuelle, j'ai un espace supérieur de 10 pixels entre le bouton et la dernière étiquette, qui ne glissera évidemment pas vers le haut lorsque l'étiquette est masquée. À partir de maintenant, j'ai créé une sortie pour cette contrainte et en modifiant la constante en fonction du nombre d'étiquettes que j'affiche. C'est évidemment un peu piraté car j'utilise des valeurs constantes négatives pour pousser le bouton vers le haut sur les cadres cachés. C'est également mauvais car il n'est pas limité aux éléments de mise en page réels, juste des calculs statiques sournois basés sur des hauteurs / rembourrages connus d'autres éléments, et en luttant évidemment contre ce pour quoi AutoLayout a été conçu.
Je pourrais évidemment simplement créer de nouvelles contraintes en fonction de mes étiquettes dynamiques, mais c'est beaucoup de microgestion et beaucoup de verbosité pour essayer de simplement réduire certains espaces. Existe-t-il de meilleures approches? Changer la taille de l'image 0,0 et laisser AutoLayout faire son travail sans manipulation des contraintes? Supprimer complètement les vues?
Honnêtement, la simple modification de la constante à partir du contexte de la vue masquée nécessite une seule ligne de code avec un calcul simple. Recréer de nouvelles contraintes avec constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
semble si lourd.
Edit Février 2018 : Voir la réponse de Ben avec UIStackView
s