web-dev-qa-db-fra.com

Remplissez proportionnellement dans UIStackView

J'utilise Storyboard pour créer une mise en page qui se compose d'un UITableView et d'un UIView en bas. J'utilise UIStackView et je les joue verticalement. Je veux que UITableView prenne 80% de la hauteur et UIView (pied de page) prenne 20%. J'utilise l'option Remplir proportionnellement d'UIStackView et même dans l'aperçu Xcode, cela semble bon, mais lorsque l'application est exécutée, elle ne s'affiche pas correctement. Voici à quoi je veux qu'il ressemble:

enter image description here

Et voici à quoi il ressemble quand il est exécuté:

enter image description here

Des idées?

15
john doe

Vous devrez définir une contrainte explicite pour rendre tableView.height 4x plus grand que la taille de votre vue. Ils n'ont pas de taille de contenu intrinsèque, donc le stackView ne "sait" pas comment remplir correctement l'espace.

Définissez également le mode de distribution sur .fill, car .fillProportionally utilise la taille du contenu intrinsèque pour déterminer la distribution appropriée (extrait de docs ):

remplissage de cas

Disposition dans laquelle la vue de pile redimensionne ses vues disposées de manière à remplir l'espace disponible le long de l'axe de la vue de pile. Les vues sont redimensionnées proportionnellement en fonction de leur taille de contenu intrinsèque le long de l'axe de la vue de pile.

En utilisant des contraintes, nous définissons la taille explicitement, sans utiliser la taille du contenu intrinsèque - donc .fillProportionally ne marche pas. Je suppose que dans ce cas, le stackView utilise les valeurs renvoyées par view.intrinsicContentSize directement. Cependant, les contraintes ne changeront pas view.intrinsicContentSize.

Si vous le faisiez en code, vous pouvez le faire avec ceci:

tableView.heightAnchor.constraint(equalTo: myView.heightAnchor, multiplier: 4).isActive = true

Dans les storyboards, contrôlez le glisser de tableView vers myView et sélectionnez Equal Heights:

enter image description here

Sélectionnez ensuite la contrainte créée et définissez le multiplicateur approprié:

enter image description here

19
Milan Nosáľ

Dans la commande Document Outline du storyboard, faites glisser la souris de la vue de dessus vers la vue de la pile et sélectionnez Hauteurs égales. Allez maintenant à l'inspecteur de taille et vous devriez voir la contrainte. Double-cliquez dessus et réglez le multiplicateur sur 0,2. Mettez ensuite à jour les cadres.

enter image description here

Conservez la distribution de la vue de la pile en tant que remplissage.

enter image description here

Faites glisser la souris de view2 à view1 pour créer une contrainte de hauteurs égales.

enter image description here

Accédez à la contrainte et définissez le multiplicateur sur 0,2.

enter image description here

9
Gihan