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:
Et voici à quoi il ressemble quand il est exécuté:
Des idées?
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
:
Sélectionnez ensuite la contrainte créée et définissez le multiplicateur approprié:
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.
Conservez la distribution de la vue de la pile en tant que remplissage.
Faites glisser la souris de view2 à view1 pour créer une contrainte de hauteurs égales.
Accédez à la contrainte et définissez le multiplicateur sur 0,2.