2010-07-15 60 views
3

我有以下代碼:Iphone sizewithfont不起作用?

- (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:字體forWidth:270 lineBreakMode:UILineBreakModeWordWrap] .height」 總是返回null或零?

我已檢查並且currentMessage正確填充。

任何想法?

+0

這裏肯定有一個錯誤,那就是你使用%@格式說明符來表示浮點數。你用%f代替了什麼結果? – warrenm 2010-07-15 05:38:17

回答

0

您沒有以正確的格式使用NSLog()。它應該是 NSLog(@「%@」,[NSString stringWithFormat:@「Height:%f」,[currentMessage sizeWithFont:font forWidth:270 lineBreakMode:UILineBreakModeWordWrap] .height]);

和%f應該用於float。

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

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

我花了2個小時這一點,嚇壞了(從那裏抓起。)。對我來說,問題在於如此小而愚蠢的事情:我開啓了「釋放」模式。所以,當使用調試器時,它停在正確的代碼行(不知道爲什麼調試器應該在發佈模式下這樣做),但沒有顯示我的預期。