2009-08-30 13 views
4

私は表示している文字列の長さに基づいて高さを調整するUITableViewCellを作成しようとしていますが、このメソッドではハングアップしています。なぜ私のsizeWithFont: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]; 

何、0としてstringHeight表示されます。私は何が欠けていますか?

ありがとうございます!

答えて

11

CGFloatは、データタイプ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

を使用することができます。私は '%d'も'浮動小数点数 'のために働いた印象を受けましたが、明らかにそうではありません。 'MAXFLOAT'はうまく動作しているようですが、適切な数だけうまく動作します。早速のご返事ありがとうございます! – Triz

+1

また、 '%d' = signed intで、doubleではありません('%i'と同じです)。 '%f'(または'%lf')は浮動小数点と倍精度の両方で動作します。 (64ビット環境下では、CGFloatはdoubleですが、ここでは当然当てはまりません) – Wevah

+2

ここでは、CGFLOAT_MAXの方が優れていますが、MAXFLOATを使用する危険性はありません。いずれかが、後で読者が意図的な限界として解釈するかもしれない、ランダムな大きな数字を選ぶよりもはっきりしています。 –

5

を使用する必要がありますまた、完全に働い%のF` `への切り替え、ああ

NSStringFromCGSize(theSize); 
関連する問題