文字列を描画したときの幅や高さを取得する : Objective-C プログラミング

PROGRAM


文字列を描画したときの幅や高さを取得する

iOS SDK では、文字列を描画したときの横幅を簡単に取得できるようになっています。

NSString クラスが幅を取得するメソッドを持っているので、たとえば NSString* 型の text という変数があれば、次のような記載になります。

CGSize size = [text sizeWithFont:font];

このように、描画したいフォントを引数に付けて sizeWithFont: メソッドを呼び出すことで、それを 1 行で描画したときの幅と高さを取得することができました。

 

指定した枠内に文字列を描画した場合のサイズを取得することもできます。

このとき、枠をはみ出す文字列については、引数で指定した方法で改行やカットをした場合のサイズを取得できます。

CGSize size = [text sizeWithFont:font constrainedToSize:acceptableSize lineBreakMode:UILineBreakModeWordWrap];

指定する引数は、描画したいフォントの他に、constrainedToSize で、この枠内に描画を収めたいことを示します。

その上で、その枠内に収まらなかった場合(横幅が足りなかったり、縦幅が足りなかったりした場合)に、収まらなかった分をどのようにするかを lineBreakMode で指定します。

複数行での描画を想定している場合、lineBreakMode には通常 UILineBreakModeWorkWrap (単語単位で改行) や UILineBreakModeCharacterWrap (文字単位で改行) を指定することになると思います。

 

このようにすることで、constrainedToSize で指定した枠に収まるような、描画サイズを取得できます。

複数行に渡る描画になった場合は、それらの行が全て収まる高さが取得できるので、たとえば文字列の長さに合わせたメッセージボックスを表示させたいような場合などにも便利です。

[ もどる ]