iPhone文字列のサイズを取得

テキストフィールドは高さ固定ですが、UITextViewは高さを調整できます。
そして、動的に高さを変更する場合、高さを取得するためのAPIが存在します。

UIStringDrawing.hに定義があります。

//単一行
- (CGSize)sizeWithFont:(UIFont *)font; // Uses UILineBreakModeWordWrap
- (CGSize)sizeWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode;

//複数行
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size; // Uses UILineBreakModeWordWrap
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(UILineBreakMode)lineBreakMode; // UITextAlignment is not needed to determine size

サンプルコード
UITextView* textView = [[[UITextView alloc] init] autorelease];
    [textView setText:@"sample"];

 // ピクセル
 CGSize textSize = [textView.text sizeWithFont:textView.font
        constrainedToSize:CGSizeMake(320, 1000)
         lineBreakMode:UILineBreakModeCharacterWrap];
    NSLog(@"textSize font:%@ w:%f h:%f", textView.font, textSize.width, textSize.height);
    // textSize font: font-family: "Helvetica"; font-weight: normal; font-style: normal; font-size: 12px w:39.000000 h:15.000000

ちなみに2行文のテキストを指定すると
[textView setText:@"sample\n2nd line"];
...
//w:43.000000 h:30.000000

0 件のコメント:

コメントを投稿

ReactNativeでAndroid対応する話

前提 ReactNativeでiOS版のアプリをリリースしていて、Android版をリリースする話 トラブルシューティング Build.VERSION_CODES.Q が存在しないエラー compileSdkVersionを29以上にすると解決 メモリー足りないエラー Execu...