2010-09-26 29 views
0

J'ai besoin d'obtenir le nombre de lignes dans un UILabel, afin que je puisse déplacer un autre UILabel en bas de la dernière ligne de texte. je l'ai fait:nombre de lignes dans UILabel

int lines = [cellDetailTextLabel.text sizeWithFont:cellDetailTextLabel.font constrainedToSize:cellDetailTextLabel.frame.size lineBreakMode:UILineBreakModeWordWrap].height /16; 

mais bien ce n'est pas parfait parce qu'il ya des cas où le UILabel est de 3 lignes long mais le code ci-dessus renvoie seulement 2, mais ce n'est pas le cas pour les 3 lignes de UILabels.

+0

Quelle est la division par 16 pour? – Echelon

+0

16 est la hauteur de ligne de sorte que vous obtenez la taille en pixels, divisez par 16, puis vous obtenez le nombre de lignes –

Répondre

1

Il est préférable de traiter la mise en page de texte de UILABEL comme une boîte noire (il est amusant de régler la taille de la police lorsque le texte est trop long).

Au lieu de cela, pensez à utiliser des méthodes de dimensionnement UIView:

// Ask the label to shrink (or grow) until it fits its text: 
[cellDetailTextLabel sizeToFit]; 
// Get the frame. 
CGRect r = cellDetailTextLabel.frame; 
// Move its origin to below cellDetailTextLabel 
r.origin.y = CGRectGetMaxY(r); 
// Set its size to the size of the second label 
r.size = cellLabel2.frame.size; 
// Finally, move the second label 
cellLabel2.frame = r; 

J'ai remarqué un comportement étrange avec surdimensionnement texte sur iPhone 4 (parfois des étiquettes sont une ligne supplémentaire trop élevée ou si); Je ne suis pas sûr si cela est corrigé en 4.1.

+0

Ceci déplace le texte de détail plutôt que la deuxième étiquette. J'ai besoin des 2 étiquettes dans le centre vertical de leur vue parente. –