Problème: Déterminer la taille (nombre de lignes), un UILabel besoins, en supposant que la largeur de 300 px. La chaîne est plus longue, j'ai donc mis le lineBreakMode à UILineBreakModeWordWrap et invoqué sizeThatFits pour essayer d'en déterminer la taille. Mais il donne une largeur de 457 px sur une seule ligne, plutôt que de l'attendre 300px en deux lignes.
Veuillez voir:
CGSize available = CGSizeMake(300, INFINITY);
UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 400)] autorelease];
label.text = title;
label.lineBreakMode = UILineBreakModeWordWrap;
label.font = [UIFont fontWithName:kBoldFont size:kTitleFontSize];
label.numberOfLines = 3;
CGSize sizedtoFit = [label sizeThatFits:available];
Mais je trouve que l'sizedtoFit variable a une largeur de 457 pixels et une hauteur de 22 px, et l'INTERFACE utilisateur affiche une seule ligne avec la zone de texte. Je m'attends à une largeur de 300 pixels et une hauteur de 44 px pour deux lignes.
Le UILabel doc pour numberoflines dit:
Lorsque le récepteur est redimensionnée à l'aide de la sizeToFit méthode, redimensionnement prend en compte la valeur stockée dans cette propriété. Par exemple, si cette propriété est définie sur 3, la sizeToFit méthode redimensionne le récepteur de sorte qu'il est assez grand pour afficher trois lignes de texte.
J'ai essayé diverses combinaisons de:
- En passant CGRectZero à la fonction init, en passant 300x400 ou 300 x l'infini.
- Réglage de l'image après la création plutôt que de les passer à la fonction init.
- Invoquant [sizeToFit] et en espérant qu'il calcule la hauteur en supposant présent largeur, mais il ne le fait pas.
- L'appel de sizeToFit et puis l'appel de sizeThatFits.
- Invoquant layoutIfNeeded.
Aucun d'entre eux travaille. Ce que je fais mal, ou est-ce mauvais d'un bug où la documentation et la mise en œuvre du cadre ne sont pas d'accord? Merci.