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 件のコメント:
コメントを投稿