web-dev-qa-db-fra.com

Réglage de la hauteur UIView dans le contrôle UIStackView

J'utilise UIStackView dans iOS 9 SDK. La hauteur de la pile est de 44 points. J'ai un UILabel et UIView dans StackView comme indiqué ci-dessous: 

 enter image description here

Maintenant, je veux que la vue verte soit beaucoup plus petite que 44 .. beaucoup comme 20. Comment puis-je faire cela? 

MISE À JOUR: Sans UIStackView, les contraintes de rupture sont les suivantes: 

[GT.BubbleView:0x14536610]   (Names: '|':UITableViewCellContentView:0x14536fd0 )>",
    "<NSLayoutConstraint:0x146b7300 GT.BubbleView:0x14536610.trailing == UITableViewCellContentView:0x14536fd0.trailingMargin>",
    "<NSLayoutConstraint:0x146c4000 'UIView-Encapsulated-Layout-Width' H:[UITableViewCellContentView:0x14536fd0(286)]>"

)

20
john doe

Si vous essayez d’atteindre un carré de 20x20 comme celui ci-dessous:

 enter image description here

Ensuite, tout ce que vous avez à faire est d’ajouter un autre UIView à votre vue verte. Faites la taille 20x20pts de cette UIView. Ensuite, changez l’arrière-plan de la vue réduite en vert et l’arrière-plan de la vue plus large à effacer.

Cela dit, cette solution ne nécessite pas de stackview et peut-être trop complique votre interface utilisateur. Je recommanderais simplement d'utiliser autolayout à la place.

Les Stackviews sont les plus utiles quand

  1. vous voulez compenser un changement d'orientation de l'appareil,
  2. vouloir empiler beaucoup de choses les unes sur les autres,
  3. voulez créer une mise en page très compliquée avec de nombreux éléments mais avec des motifs que vous pouvez répéter, ou
  4. je veux simplement pouvoir supprimer un élément ou ajouter un élément avec le redimensionnement se corrigeant

Cette liste n'est pas exhaustive, mais devrait vous donner une idée de quand et pourquoi vous utiliseriez une vue de pile.

En dehors d'une cellule prototype

Ce comportement est trivial. Vous pouvez simplement définir les contraintes sur votre vue:  enter image description here '

Et ensuite, définissez les contraintes sur la vue pile:  enter image description here

J'espère que cela aide, à la vôtre!

17
Rob Norback
  1. Vous devez d’abord ajouter UIStackView à la cell enter image description here

  2. Besoin d'ajouter des contraintes à votre UIStackView enter image description here

  3. Ajustez votre UIStackView enter image description here

  4. Faites glisser UILabel dans votre UIStackView enter image description here

  5. Puis faites glisser UIView dans votre UIStackView enter image description here

  6. Ajouter green-UIView comme sous-vue à pink UIView enter image description here

  7. Maintenant, vous pouvez ajouter quelques contraintes à green-UIView enter image description here  enter image description here

  8. Maintenant, vous pouvez exécuter l'application sur un simulateur ou un appareil  enter image description here  enter image description here

    Remarquez que je n'ai ajouté aucune contrainte pour UILabel.

24
Alexey Bondarchuk

Le problème de contrainte de rupture peut être facilement résolu en définissant la priorité des contraintes de largeur et de hauteur sur 800 ou plus.

0
Farooq Zaman

Je voulais poster ma réponse ici afin que les autres puissent voir, malgré un problème légèrement différent de celui des PO. 

J'essayais de redimensionner un UIView contenant un UIStackView et les contraintes étaient levées. Je changeais la contrainte de hauteur d'UIView entre 0 et 66 en fonction des informations pertinentes à montrer pour lesquelles l'affichage de la pile était affiché.

J'ai réussi à résoudre les contraintes de rupture en supprimant les contraintes supérieure et inférieure de la vue de pile à l'intérieur de la vue et à la définir de manière à ce qu'elle soit centrée verticalement. Cela a entraîné un défilement beaucoup plus fluide dans ma vue de table.

0
Michael McKenna