SummerWind

Web, Photography, Space Development

UILabelのWrapされた文字列の高さの取得

引き続きiPhone開発メモ。UILabelには文字列を上寄せとか下寄せにする仕組みがないようです。つまり文字列は高さに対して常に中央に表示されてしまいます。なので改行モードをUILineBreakModeWordWrapに設定していて、かつ文字を上寄せにしたかったりする場合は、UILabel自体の高さを調節しなければなりません。

そうなるとWrapされた文字列の高さを取得する必要が出てくるわけですが、それはNSStringの sizeWithFont: constrainedToSize: lineBreakMode: メソッドを使えば可能です。

NSString *str = @"sample string";
CGSize size = [str
        sizeWithFont:[UIFont boldSystemFontOfSize:13]
   constrainedToSize:CGSizeMake(500, 2000)
       lineBreakMode:UILineBreakModeWordWrap];
NSLog(@"String height: %d", size.height);

constrainedToSize: には文字列の表示領域の幅と十分な高さを適当に指定します。戻り値はCGSizeで得られるので、heightプロパティにアクセスすれば、文字列の高さを取得することができます。

Moto Ishizawa

Moto Ishizawa
ソフトウェアエンジニア。ロケットの打上げを見学するために、たびたびフロリダや種子島にでかけるなど、宇宙開発分野のファンでもある。