redimensionner superview après les sous-vues changent de manière dynamique à l'aide de mise en page automatique
Je ne peux pas pour l'amour de dieu le coup de redimensionnement superview.
J'ai un UIView *superview
avec 4 UILabels
. 2 fonction d'en-tête pour les 2 autres.
Le contenu de toutes les 4 sont dynamiques en provenance de la base de données.
SizeToFit
vs SizeThatFits:(CGSize)
vs UIView systemLayoutSizeFittingSize:
, en passant soit UILayoutFittingCompressedSize
ou UILayoutFittingExpandedSize
.
Je utiliser la mise en page automatique par programmation et ont établi la superview hauteur égale ou supérieure à un numéro fictif.
où et comment puis-je utiliser ces SizeToFit
vs sizeThatFits:(CGSize)
vs UIView systemLayoutSizeFittingSize:
, en passant soit UILayoutFittingCompressedSize
ou UILayoutFittingExpandedSize
. J'ai lu beaucoup de conseils ici sur la pile, mais a terminé avec rien.
Ai-je besoin de recalculer les contraintes pour le superview quelque part spécifique. Maby réglage de la hauteur de @property " dans sa classe de contrôleur et de supprimer et readd il?
Atm j'ai essayé de tout mettre partout, et puis certains. Toujours je reçois la même taille résultat final avec le mannequin de la hauteur et du texte flottant à l'extérieur. Même après le réglage de clipsToBound sur la sous-vue.
J'en suis à me gratter les cheveux de.. aider
- Hey, pourriez-vous poster votre code quelque part sur pastebin ou quelque chose si je pouvais prendre un coup d'oeil? Je souffre d'un problème similaire. Il a été une semaine ou plus.
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez la Mise en page Automatique, voici ce que vous devez faire:
Assurez-vous de ne pas ajouter de largeur fixe et/ou contraintes de hauteur à l'un de vos sous-vues (selon la dimension(s) que vous souhaitez dynamiquement la taille). L'idée est de laisser la valeur intrinsèque de la taille du contenu de chaque sous-vue de déterminer la sous-vue de la hauteur.
UILabel
s viennent avec 4 automatique contraintes implicites qui vont (avec moins de priorité Requis) de tenter de garder l'étiquette de l'image à la taille exacte nécessaire pour s'adapter à tous les le texte à l'intérieur.Assurez-vous que les bords de chaque étiquette sont reliés de manière rigide (avec un rang de priorité élevé de contraintes) vers les bords les uns des autres et de leurs superview. Vous voulez vous assurer que si vous imaginez que l'un des labels de croissance en taille, ce serait forcer les autres étiquettes pour faire de la place et surtout de la force de la superview à s'élargir.
Seulement ajouter des contraintes à la superview pour définir sa position, pas la taille (au moins, pas de la dimension(s) que vous voulez qu'il taille de manière dynamique). N'oubliez pas que si vous définissez les contraintes internes correctement, sa taille sera déterminée par la taille de tous les sous-vues, depuis ses bords sont reliés à la leur, d'une certaine façon.
Que c'est. Vous n'avez pas besoin d'appeler
sizeToFit
ousystemLayoutSizeFittingSize:
pour obtenir que cela fonctionne, il suffit de charger vos points de vue et définir le texte et qui devraient l'être. Le système de mise en page, le moteur de faire les calculs pour vous pour résoudre vos contraintes. (Si quelque chose, vous pourriez avoir besoin d'appelersetNeedsLayout
sur le superview...mais cela ne devrait pas être nécessaire.)constraintsWithVisualFormat
et je comprends parfaitement votre point de vue sur le contenant des sous-vues des étirements et un peu pousser le superview à sa taille 🙂 Merci encoretranslatesAutoresizingMaskIntoConstraints = NO
si vous utilisez xib.Utilisez un récipient vues
Dans l'exemple suivant, j'ai un 30x30 image, et la
UILabel
est plus petit que le contenant avec le texte de l'espace réservé. J'avais besoin de l'contenant vue d'être au moins aussi grand que l'image, mais il a besoin de croître pour contenir plusieurs lignes de texte.Dans un format visuel, le récipient intérieur ressemble à ceci:
Réglez ensuite le contenant de vue à la hauteur de l'étiquette. Maintenant le contenant afficher le trajet de la taille de l'étiquette.
Comme @smileyborg a souligné, dans sa réponse, la connexion, le contenu de la lettre le superview informe le moteur de mise en forme que le simple conteneur de vue devraient conduire à croître.
Jaune alignement des rectangles
Si vous voulez le jaune d'alignement des rectangles ajouter
-UIViewShowAlignmentRects YES
dans votre système de liste d'exécuter des arguments.-UIViewShowAlignmentRects YES
-- bon conseil!Ceci a été rendu beaucoup plus facile avec l'introduction de la Pile des points de Vue dans iOS 9. L'utilisation d'une pile de vue à l'intérieur de votre point de vue à contenir la totalité de votre contenu qui se redimensionne, et puis il suffit d'appeler
après la modification de votre contenu. Ensuite, vous pouvez obtenir votre nouvelle taille en appelant
si jamais vous avez besoin de calculer la taille exacte d'un point de vue.
Ce suit un peu @smileyborg réponse et est livré avec un exemple concret.
Ne vais pas décrire toutes les contraintes, mais celles relatives au calcul de la hauteur des objets de l'INTERFACE utilisateur.
height
contrainte, dans ce cas, la mise en page automatique de ne pas redimensionner les étiquettes en fonction du texte, de sorte que le réglage de bord des contraintes est la clé. (flèches vertes)[Sous-vue] les Étapes 1 et 3 sont très faciles à suivre, mais cette étape peut être mal compris. Comme dans le cas des étiquettes, des sous-vues ne doivent pas avoir
height
contrainte. Tous les sous-vues doit avoirtop
contrainte, en ignorantbottom
contrainte, qui peut vous faire penser déclenchera pas satisfait la contrainte d'exception lors de l'exécution, mais il ne sera pas si vous définissezbottom
contrainte pour le dernier sous-vue. Manquant de le faire sauter la mise en page. (flèches rouges)[Superview] Ensemble de toutes les contraintes, la façon dont vous avez besoin, mais payer une grande attention à la
height
contrainte. Attribuer une valeur aléatoire, mais le rendre facultatif, mise en page automatique permettra de régler la hauteur exactement pour s'adapter à la sous-vues. (flèches bleues)Cela fonctionne parfaitement, il n'est pas nécessaire d'appeler n'importe quel système de mise à jour des méthodes.