Iphone sizewithfont не работает? - PullRequest
3 голосов
/ 15 июля 2010

У меня есть следующий код:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
NSString *currentMessage = [FeedMessages objectAtIndex:indexPath.row];

NSLog(currentMessage);

UIFont *font = [UIFont systemFontOfSize:14];

NSLog([NSString stringWithFormat:@"Height: %@",[currentMessage sizeWithFont:font forWidth:270 lineBreakMode:UILineBreakModeWordWrap].height]);

return [currentMessage sizeWithFont:font forWidth:270 lineBreakMode:UILineBreakModeWordWrap].height;
}

Может кто-нибудь сказать мне, почему "[currentMessage sizeWithFont: font forWidth: 270 lineBreakMode: UILineBreakModeWordWrap] .height" всегда возвращает ноль или ноль?

Я проверил, и текущее сообщение правильно заполнено.

Есть идеи?

Ответы [ 4 ]

7 голосов
/ 18 августа 2010

Пройдите этот вопрос. Он описывает это - вы должны использовать, CGFLOAT_MAX или увидеть следующий код (взят оттуда.)

 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];
0 голосов
/ 18 июля 2011

Я потратил на это 2 часа, волнуясь. Для меня проблема была в такой маленькой и глупой вещи: у меня был включен режим «релиз». Поэтому при работе с отладчиком он останавливался на правильных строках кода (понятия не имею, почему отладчик должен делать это в режиме выпуска), но не показал того, что я ожидал.

0 голосов
/ 15 июля 2010

Помимо вашего ошибочного жонглирования типов, которое было отмечено выше, sizeWithFont: forWidth: lineBreakMode: измеряет только размеры (усеченной) первой строки, как ни странно.

вы хотите использовать sizeWithFont: constrainedToSize: lineBreakMode: который фактически разбивает текст на строки и учитывает их.Используйте CGSizeMake (270.0f, 999999.0f), чтобы получить полную высоту текста.

см. http://developer.apple.com/iphone/library/documentation/uikit/reference/NSString_UIKit_Additions/Reference/Reference.html

0 голосов
/ 15 июля 2010

Вы не используете NSLog () в правильном формате.это должен быть NSLog (@ "% @", [NSString stringWithFormat: @ "Высота:% f", [currentMessage sizeWithFont: шрифт дляWidth: 270 lineBreakMode: UILineBreakModeWordWrap] .height]);

и% f должныиспользоваться для поплавка.

...