3

我有以下代码:

- (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”总是返回null或nil?

我已经检查并正确填充了 currentMessage 。

有任何想法吗?

4

4 回答 4

7

通过这个问题。它描述了-您必须使用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];
于 2010-08-18T13:31:11.767 回答
0

我花了2个小时在这上面,吓坏了。对我来说,问题出在这么一件小而愚蠢的事情上:我打开了一个“释放”模式。因此,当使用调试器时,它会在正确的代码行处停止(不知道为什么调试器应该在发布模式下这样做),但没有显示出我的预期。

于 2011-07-18T09:23:55.053 回答
0

除了上面提到的有缺陷的类型杂耍之外, 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

于 2010-07-15T13:36:01.720 回答
0

您没有以正确的格式使用 NSLog() 。它应该是 NSLog(@" %@",[NSString stringWithFormat:@"Height: %f",[currentMessage sizeWithFont:font forWidth:270 lineBreakMode:UILineBreakModeWordWrap].height]);

并且 %f 应该用于浮点数。

于 2010-07-15T07:27:51.717 回答