2009-08-30 4 views
4

Я пытаюсь сделать UITableViewCell, который настраивает его высоту в зависимости от длины отображаемой строки, но я получаю зависание этого метода.Почему мой размерWithFont: constrainedToSize: lineBreakMode: всегда возвращает ноль?

Вот что я получил:

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]; 

Независимо от того, stringHeight отображается как 0. Что мне не хватает?

Спасибо!

ответ

11

CGFloat s соответствует C float тип данных; правильный формат спецификатора для них %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]; 

Кроме того, вы должны использовать CGFLOAT_MAX вместо MAXFLOAT

+0

Ааа, переход на '% f' полностью работал. У меня создалось впечатление, что '% d' также работал на' floats', но это явно не так. «MAXFLOAT», похоже, работает нормально, хотя он будет работать так же хорошо с достаточно большим числом. Спасибо за быстрый ответ! – Triz

+1

Кроме того, '% d' = подписанный int, а не double (это то же самое, что и'% i'). '% f' (или'% lf') будет работать как для float, так и для double. (Кроме того, под 64-битным CGFloat является двойным, но это явно не применимо здесь.) – Wevah

+2

Лучшей константой здесь является, вероятно, CGFLOAT_MAX, но нет никакой опасности использовать MAXFLOAT. Либо яснее, чем выбирает случайное большое число, что может быть истолковано более поздними читателями как преднамеренное ограничение. –

5

Вы можете также использовать

NSStringFromCGSize(theSize); 

 Смежные вопросы

  • Нет связанных вопросов^_^