2009-08-20 8 views
3

&がテキスト上に存在するときはいつも、高さの取得は常にオフになっているようです。どちらの関数は、実際の高さ未満を返す:textRectForBoundsを使用して第二の方法は、はるかに近い実際の高さを返すものの、それらのsizeWithFont - &文字を含むときの奇妙な振る舞い

CGSize labelSize = [nameLabel.text sizeWithFont:nameLabel.font constrainedToSize: CGSizeMake(actualWidth, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap]; 

CGRect textSize = CGRectMake(0.0, 0.0, 320.0, FLT_MAX); 
nameLabel.frame = [nameLabel textRectForBounds:textSize limitedToNumberOfLines:0]; 

どれも正しい高さを返さないでしょう。前者は240を返しますが、後で700を返します。実際は750です。

これは、互いに重なり合っているテキストを表示する私のUITableViewを台無しにします。

興味深いことに、テキストには&文字が含まれていない限り、同じ高さが返されます。

私の人生は私を啓発することができますか?私はここで何が起こっているのか分からず、これを正しく解決する方法を知っています。

ありがとうございます。

+0

あなたの最初の例は何ですか?constrainedSizeの最大値と最小値は何ですか? – Daniel

答えて

2

-textRectForBounds:limitedToNumberOfLines:は直接呼び出さないでください(docsに注意してください)。だから正しいとは限りません。また、「UITableViewCellオブジェクトのラベルのサイズは、要求されたサイズではなく、セルのサイズに基づいています」と指摘しています。

sizeWithFont:constrainedToSize:lineBreakMode:への呼び出しでactualWidthが予想よりも広いと思われます。そのような行は実際には折り返されません。 actualWidthはどうやって計算されていますか?

具体的には、これをsizeWithFont:forWidth:lineBreakMode:と置き換えることができます。それは、あなたが作っているコールの周りのラッパーかもしれません。

1

私はちょうど同じ問題がありました。私は&の文字をエスケープし、それを&に変更したところ、すべて正常に機能しました。 UILabelはエスケープされた&を正しく表示するのに十分なほどスマートで、サイズは適切に計算されました。