NSAttributedString を 3 行表示したい。幅と行数に基づいて、必要な高さを把握する方法はありますか?
そして、計算をバックグラウンドスレッドで実行したいので、サイズ計算を行うために UILabel を作成したくありません。
NSAttributedString を 3 行表示したい。幅と行数に基づいて、必要な高さを把握する方法はありますか?
そして、計算をバックグラウンドスレッドで実行したいので、サイズ計算を行うために UILabel を作成したくありません。
なぜこれがまだ答えられていないのか不思議です。とにかく、これが私にとって最も速い方法です。
「Height」という名前の NSAttributedString カテゴリを作成します。これにより、「NSAttributedString+Height.{h,m}」というタイトルの 2 つのファイルが生成されます。
.h ファイル内:
@interface NSAttributedString (Height)
-(CGFloat)heightForWidth:(CGFloat)width;
@end
.m ファイル内:
-(CGFloat)heightForWidth:(CGFloat)width
{
return ceilf(CGRectGetHeight([self boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX)
options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading
context:nil])) + 1;
}
何が起こっているかは次のとおりです。
使い方はこちら
NSAttributedString *string = ...
CGFloat height = [string heightForWidth:320.0f];
その高さをレイアウト計算に使用できます。