3

& がテキストに存在する場合は常に、高さの取得が常にオフになっているようです。どちらの関数も、実際の高さよりも小さい値を返します。

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

textRectForBounds を使用する 2 番目のメソッドは実際の高さにより近い値を返しますが、どれも正しい高さを返しません。前者は 240 を返しますが、後者は 700 を返します。実際は 750 です。

これにより、相互に重なっているテキストを表示する UITableView が台無しになります。

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

ここで何が起こっているのか理解できず、これを正しく修正する方法がわかりません。

よろしくお願いします。

4

2 に答える 2

2

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

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

sizeWithFont:forWidth:lineBreakMode:これを、あなたがやろうとしていることに特化したものに置き換えたいと思うかもしれません。とはいえ、それはあなたが行っている呼び出しの単なるラッパーかもしれません。

于 2009-08-20T15:47:38.477 に答える
1

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

于 2010-01-15T17:38:58.370 に答える