2009-08-30 7 views
4

J'essaie de faire un UITableViewCell qui ajuste sa hauteur en fonction de la longueur d'une chaîne qu'il affiche, mais je suis accroché sur cette méthode.Pourquoi est-ce que sizeWithFont: constrainedToSize: lineBreakMode: retourne toujours zéro?

Voici ce que j'ai:

NSString *text = @"A really long string in here"; 
CGSize theSize = [text sizeWithFont:[UIFont boldSystemFontOfSize:18.0f] constrainedToSize:CGSizeMake(265.0f, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap]; 
NSString *stringHeight = [NSString stringWithFormat:@"%d", theSize.height]; 

Peu importe, stringHeight affiche comme 0. Qu'est-ce que je rate?

Merci!

Répondre

11

CGFloat s correspondent au type de données C float; le spécificateur de format approprié pour eux est %f:

NSString *text = @"A really long string in here"; 
CGSize theSize = [text sizeWithFont:[UIFont boldSystemFontOfSize:18.0f] constrainedToSize:CGSizeMake(265.0f, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap]; 
NSString *stringHeight = [NSString stringWithFormat:@"%f", theSize.height]; 

En outre, vous devez utiliser CGFLOAT_MAX au lieu de MAXFLOAT

+0

Ahhh, le passage à '% f' totalement travaillé. J'avais l'impression que '% d' travaillait aussi pour 'floats', mais ce n'est clairement pas le cas. 'MAXFLOAT' semble bien fonctionner, bien qu'il fonctionne aussi bien avec un nombre suffisant. Merci pour la réponse rapide! – Triz

+1

De même, '% d' = signé int, pas double (c'est la même chose que'% i'). '% f' (ou'% lf') fonctionnera pour les flotteurs et les doubles. (De plus, sous CGFloat est un double, mais cela ne s'applique évidemment pas ici.) – Wevah

+2

La meilleure constante ici est probablement CGFLOAT_MAX, mais il n'y a aucun danger d'utiliser MAXFLOAT. L'un ou l'autre est plus clair que de choisir un grand nombre aléatoire, ce qui pourrait être interprété par les lecteurs ultérieurs comme une limite intentionnelle. –

5

Vous pouvez également utiliser

NSStringFromCGSize(theSize); 
Questions connexes