Ajuster la hauteur d'un UILabel à un son contenu
Bonjour,
Je cherche désespérément à ajuster la hauteur de mon label en fonction de son contenu
J'ai donc essayé ça, sans réussite:
_labelContenu.text = contenu_news;
NSString* messageContenu = contenu_news;
CGSize maxLabelSize = CGSizeMake(200, 1000);
CGSize expectedLabelSize = [messageContenu sizeWithFont:_labelContenu.font constrainedToSize:maxLabelSize lineBreakMode:NSLineBreakByWordWrapping];
CGRect newFrame = _labelContenu.frame;
newFrame.size.height = expectedLabelSize.height+10;
_labelContenu.frame=newFrame;
Aucune réussite non plus avec ça:
_labelContenu.text = contenu_news;
_labelContenu.lineBreakMode = NSLineBreakByWordWrapping;
_labelContenu.text=contenu_news;
_labelContenu.numberOfLines = 0;
[_labelContenu sizeToFit];
Qui pourrais m'aider en me donnant la solution svp ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Salut Jean75,
j'ai déjà été confronté à ce problème. Voici comment je fais.
1) je mets ma vue en autolayout. Tu dois mettre des contraintes pour ton UILabel mais de contrainte pour la hauteur. En gros, dans IB, il faut que la hauteur du UILabel colle avec la hauteur du texte qui y est mis (c'est lié à intrinsicSize)
2) je fais
Des fois ça marche juste comme ça. Des fois il faut ajouter :
3)
cf. http://stackoverflow.com/a/13032251/1670830
Hello Colas,
Déjà merci pour ta réponse.
J'ai essayé tout ce que tu m'a dit, excepté les contraintes, et il n'y a toujours aucune évolution.
J'ai également regardé le lien vers SO ainsi que l'UILabel Documentation, sans résultats
En utilisant les contraintes (pour tout sauf la hauteur du label), le label va alors utiliser sa "intrisicContentSize" automatiquement pour caler sa hauteur. Donc c'est justement le fait d'utiliser les contraintes qui change tout.
Et puis sinon y'a les méthodes sizeThatFits: et sizeToFit: (cf la doc) de toute façon si tu veux t'embêter à tout faire à la main...
Essaye avec les contraintes.
Conseil : essaye d'abord sur un projet-test juste dédié à cette fonctionnalité, ça te permettra de comprendre quels sont les éléments nécessaires.
sizeToFit j'ai essayé sans résultats
Je vais essayer de regarder les contraintes
Hello,
J'utilise ce bout de code dans mes cellules :
CGSize size = [tonLabel sizeThatFits:CGSizeMake(tonLabel.frame.size.width, INFINITY)];
....
// Mise à jour de la nouvelle taille du label.
// Oublie pas de setter le numberOfLines à 0.
Mais le mieux c'est de suivre les conseils des autres sur les autolayouts.
Bon j'ai commencé à regarder les contraintes, et j'essaye de les mettre en place sur le projet
@Samir: J'ai essayé ta solution en mettant le code ci-dessous, mais ça ne marche toujours pas
A priori, la solution de Samir n'est pas compatible avec AutoLayout. Il faut que tu regardes si ton xib est configuré pour utiliser les contraintes ou pas.
Je te conseille de régler ce problème d'abord sur un "toy project" (un projet test), ça sera plus clair pour toi ensuite...
2) Tu demandes à ton code de calculer la taille ("sizeThatFits:") de ton label... AVANT d'y avoir mis le texte dedans ! Forcement ça va moins bien marcher ! "sizeThatFits:" va te calculer la taille idéale de ton label pour qu'il puisse afficher son label.text mais si au moment où tu l'appelles tu n'as pas encore mis le texte il va avoir du mal à le deviner !!
Oui le storyboard utilise les contraintes vu qu'elles sont utilisées dans les autres écrans.
J'ai fait un toy project avec un label 2 boutons et une imageview, mais ça me parait pas beaucoup plus clair ^^
Même après y avoir mis le texte ça ne marche pas
@Jean75, envoie ton toy project, je peux y jeter un oe“il ;-)
Après ça ne marche pas ce n'est pas suffisant, il faut que tu décrives le contexte. Tu a mis ou ce code ? est-ce que tu es sur que ton label n'est pas nil ? .....
@Colas: Tu le trouveras en pièce jointe
@Samir, oui le label n'est pas nul, et le code a été mis dans mon viewDidLoad
@Jean75 : il n'y a pas de code dans ton projet test !
Bah non, juste des élements placés avec des contraintes, afin de tester et d'appréhender ça
Bin oui mais il faut que tu mettes le code qu'on te propose de tester !!! pour la longueur de UILabel se transforme automatiquement.
Là t'as même pas mis de texte long dans ton UILabel !!!
Bon finalement ça marche bien, mon texte s'affiche sur plusieurs lignes, mais la position des objets n'est pas celle désirée...
C'est normal : en gros tu as dit "Je veux que mon label soit à 82 au-dessus des boutons". Donc, quand ton label grandit et bien, il reste 82 au-dessus... et du coup, il remonte trop haut !!!
Du coup ta nouvelle question est : comment marchent les contraintes ?
Je t'invite à faire quelques recherches et à venir poser des questions ! (mais cherche avant).
Les contraintes c'est un gros morceau, j'espère que tu trouveras de la bonne doc sur le web ;-)
Bah déjà j'ai téléchargé les 2 vidéos de la WWDC 2012, faut que je les regarde
bien joué ;-)