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]); である必要があります。

float には %f を使用する必要があります。

于 2010-07-15T07:27:51.717 に答える