iPhoneでUILabelに表示させる文字量によって高さが変わる場合があると思います。
そんな時に動的に高さ(height)を知る方法をまとめました。
方法は2つ、
- 文字の内容とUILabelの幅をして計算して高さを算出する方法
- UILabelに文字を設定してから、sizeToFitメソッドを呼び出して自動で高さを設定する方法
になります。
具体的にどうするのか見ていきましょう
1.文字の内容とUILabelの幅をして計算して高さを算出する方法
実際に計算する処理が以下になります。
CGSize size = [label.text
sizeWithFont:label.font
constrainedToSize:CGSizeMake(width, 5000)
lineBreakMode:label.lineBreakMode];
「sizeWithFont:constrainedToSize:lineBreakMode」を使用して計算します。
使用フォント、幅、改行モードを設定して自動計算してくれるメソッドが用意されてんるなんて便利ですね。
この時の注意点は、第2引数のSizeの高さをある程度大きな値を設定する事です。
そうすると、正しい値が戻ってくるので、正しい値で対象のUILabelの高さを設定します。
2.UILabelに文字を設定してから、sizeToFitメソッドを呼び出して自動で高さを設定する方法
次に自動的にUILabelの高さを決定してもらう方法です。
まず、ソースは
[label setLineBreakMode:UILineBreakModeWordWrap];
[label setNumberOfLines:0];
CGRect frame = [label frame];
frame.size = CGSizeMake(width, 5000);
[label setFrame:frame];
[label sizeToFit];
このメソッドでも、同じようにフォント、幅、改行モードを設定してから「sizeToFit」メソッドを呼ぶことで
自動的に高さが設定されます。
この時の注意点は、対象のUILabelの高さをある程度高い値で設定します。
もう一つ、「setNumberOfLines」には、「0」を設定しておいて下さい。
これを忘れると改行されなくなりますので注意してください。
このようにして計算出来た高さを使えば、対象のUILabelの正しい高さを設定できます。