sizeWithFont:constrainedToSize:lineBreakMode:
を使用する。
複数行のUILabelでテキストの内容に合わせて高さを調整したい場合、これでサイズを取得してUILabelの大きさを設定する。
// --- テキストの内容によりラベルの大きさを変える ---
// 表示最大サイズ
CGSize bounds = CGSizeMake(label.frame.size.width, 200);
// フォント
UIFont *font = label.font;
// 表示モード
UILineBreakMode mode = label.lineBreakMode;
// 文字列全体のサイズを取得
CGSize size = [label.text sizeWithFont:font constrainedToSize:bounds lineBreakMode:mode];
NSLog(@"size: %@", NSStringFromCGSize(size));
// ラベルのサイズを変更
label.frame = CGRectMake(label.frame.origin.x,
label.frame.origin.y,
size.width, size.height);
iOS7ではNSStringの sizeWithFont:constrainedToSize:, sizeWithFont:constrainedToSize:lineBreakMode: がDeprecatedになり、かわりにboundingRectWithSize:options:attributes:context: を使用するようになった。
それと、取得したsizeをceilfなどで整数値に切り上げないとうまくいかない。
(下のような感じになる。lineBreakModeが考慮されていないけど。)
// --- テキストの内容によりラベルの大きさを変える ---
// 表示最大サイズ
CGSize bounds = CGSizeMake(label.frame.size.width, 200);
// フォント
UIFont *font = label.font;
// 表示モード
UILineBreakMode mode = label.lineBreakMode;
// 文字列全体のサイズを取得
CGSize size;
if ([NSString instancesRespondToSelector:@selector(boundingRectWithSize:options:attributes:context:)]) {
CGRect rect
= [label.text boundingRectWithSize:bounds
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:font}
context:nil];
size = rect.size;
}
else {
CGSize size = [label.text sizeWithFont:font
constrainedToSize:bounds
lineBreakMode:mode];
}
size.width = ceilf(size.width);
size.height = ceilf(size.height);
NSLog(@"size: %@", NSStringFromCGSize(size));
// ラベルのサイズを変更
label.frame = CGRectMake(label.frame.origin.x,
label.frame.origin.y,
size.width, size.height);
0 件のコメント:
コメントを投稿