1. ホーム
  2. objective-c

[解決済み] NSAttributedStringのboundingRectWithSizeが間違ったサイズを返す

2022-04-27 23:59:44

質問

属性付きの文字列の矩形を取得しようとしていますが、boundingRectWithSizeの呼び出しが、渡したサイズを尊重せず、大きな高さではなく1行の高さの矩形を返しています(長い文字列です)。以下のコードのように、height に非常に大きな値や 0 を渡して実験してみましたが、返される rect はいつも同じです。

CGRect paragraphRect = [attributedText boundingRectWithSize:CGSizeMake(300,0.0)
  options:NSStringDrawingUsesDeviceMetrics
  context:nil];

これは壊れているのでしょうか、それとも折り返しテキスト用の矩形を返すようにするために何か他のことをする必要があるのでしょうか?

解決方法は?

正しいオプションが与えられていないようです。ラッピングラベルの場合は、最低でも以下のオプションを指定してください。

CGRect paragraphRect =
  [attributedText boundingRectWithSize:CGSizeMake(300.f, CGFLOAT_MAX)
  options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
  context:nil];

注意:元のテキストの幅が300.f以下の場合、行の折り返しは行われませんので、バインドサイズが正しいことを確認してください。