UIView avec une hauteur dynamique qui utilise intrinsicContentSize
Je suis en train de créer un conteneur personnalisé vue a une UIImageView et d'une multiligne UILabel comme des sous-vues. Pour rendre la vue à travailler très bien avec mise en page automatique, je suis primordial intrinsicContentSize comme ci-dessous:
- (CGSize)intrinsicContentSize
{
return [self sizeThatFits:self.bounds.size];
}
La taille calculée en sizeThatFits a la même largeur, et ajuste la hauteur de sorte que l'étiquette et de l'image ne sont pas coupés. Cela fonctionne bien, mais j'ai été surpris de voir dans les docs le commentaire suivant:
Cette taille intrinsèque doit être indépendant du cadre de contenu, car il n'y a aucun moyen de communiquer de façon dynamique un changement de la largeur du système de mise en page basée sur un changement de la hauteur, par exemple.
Si c'est le cas, qu'est-ce que la mise en page automatique de façon à ajuster les points de vue actuels de la hauteur en fonction de sa largeur et son contenu? Dois-je être à la veille d'une autre façon?
source d'informationauteur Tark
Vous devez vous connecter pour publier un commentaire.
Pour répondre à ma propre question, il semble qu'il n'existe pas une mise en forme automatique solution adaptée à cette situation. À la recherche de
UILabel
pour l'inspiration, ici, le problème a été résolu avec l'ajout d'une propriétépreferredMaxLayoutWidth
qui peut ensuite être utilisé comme limitant la largeur intrinsèque de la taille du contenu de calcul. Tout affichage personnalisé auraient besoin d'utiliser quelque chose de similaire.Je pense que le doc signifie que, votre
containerView
pourrait avoir unplaceHolderFrame
comme cadre de contenu.taille intrinsèque ne doit pas être lié au contenu de l'image, mais seulement à son propre subContent.
Votre image et votre UILabel par exemple.
Vous devez calculer à la fois la hauteur et la largeur de l'étiquette et de l'image.
Ce qui devrait être facile, car ils ont tous intrinsèque de la taille.
Juste mon avis...
Je suppose que vous pourriez utiliser UILabel nouveau preferredMaxLayoutWidth propriété à la mise en page de l'étiquette correctement et d'utiliser d'autres méthodes à la disposition d'autres choses.
Quelque chose comme ceci:
Aligner le bord inférieur de l'contenant de vue à la fois l'image et l'étiquette.
Détails dans http://code.dblock.org/ios-uiview-with-an-image-and-text-with-dynamic-height.