UILabelの高さを動的に計算する方法は?
2023-09-29 22:29:35
質問
UILabelの行数と高さを、与えられたテキストから動的に計算したいのですが。
どのように解決するのですか?
これを試してみてください。
// UILabel *myLabel;
CGSize labelSize = [myLabel.text sizeWithFont:myLabel.font
constrainedToSize:myLabel.frame.size
lineBreakMode:NSLineBreakByWordWrapping];
CGFloat labelHeight = labelSize.height;
int lines = [myLabel.text sizeWithFont:myLabel.font
constrainedToSize:myLabel.frame.size
lineBreakMode:NSLineBreakByWordWrapping].height/16;
// '16' is font size
または
int lines = labelHeight/16;
NSLog(@"lines count : %i \n\n",lines);
または
int lines = [myLabel.text sizeWithFont:myLabel.font
constrainedToSize:myLabel.frame.size
lineBreakMode:UILineBreakModeWordWrap].height /myLabel.font.pointSize; //fetching font size from font
カテゴリを使用する場合は、以下のような名前のカテゴリクラスを作成するだけです。
UILabel+UILabelDynamicHeight.hを作成します。
UILabel+UILabelDynamicHeight.mがあります。
もう高さの計算に悩まされることはありません。以下の実装を確認してください。
iOS7 &Above、iOS7以下でのアップデートです。UILabelの高さを動的に計算するようにしました。
#define SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
#define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)
#define iOS7_0 @"7.0"
UILabel+UILabelDynamicHeight.hを追加しました。
#import <UIKit/UIKit.h>
@interface UILabel (UILabelDynamicHeight)
#pragma mark - Calculate the size the Multi line Label
/*====================================================================*/
/* Calculate the size of the Multi line Label */
/*====================================================================*/
/**
* Returns the size of the Label
*
* @param aLabel To be used to calculte the height
*
* @return size of the Label
*/
-(CGSize)sizeOfMultiLineLabel;
@end
UILabel+UILabelDynamicHeight.mです。
#import "UILabel+UILabelDynamicHeight.h"
@implementation UILabel (UILabelDynamicHeight)
#pragma mark - Calculate the size,bounds,frame of the Multi line Label
/*====================================================================*/
/* Calculate the size,bounds,frame of the Multi line Label */
/*====================================================================*/
/**
* Returns the size of the Label
*
* @param aLabel To be used to calculte the height
*
* @return size of the Label
*/
-(CGSize)sizeOfMultiLineLabel{
//Label text
NSString *aLabelTextString = [self text];
//Label font
UIFont *aLabelFont = [self font];
//Width of the Label
CGFloat aLabelSizeWidth = self.frame.size.width;
if (SYSTEM_VERSION_LESS_THAN(iOS7_0)) {
//version < 7.0
return [aLabelTextString sizeWithFont:aLabelFont
constrainedToSize:CGSizeMake(aLabelSizeWidth, MAXFLOAT)
lineBreakMode:NSLineBreakByWordWrapping];
}
else if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(iOS7_0)) {
//version >= 7.0
//Return the calculated size of the Label
return [aLabelTextString boundingRectWithSize:CGSizeMake(aLabelSizeWidth, MAXFLOAT)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{
NSFontAttributeName : aLabelFont
}
context:nil].size;
}
return [self bounds].size;
}
@end
関連
-
[解決済み] UILabelにスペース/パディングを追加する
-
[解決済み] UILabel 内のテキストを縦に上部に揃える
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み】テキストに応じてUILabelの高さを調整する。
-
[解決済み】UILabelで行間をコントロールする方法
-
[解決済み】SwiftでStringに基づくUILabelのサイズを把握する。
-
[解決済み] テキストの長さに基づいてUILabelの幅を計算する方法は?
-
[解決済み] iOSアプリでターゲットのバージョン/ビルド番号をプログラム的に表示するには?
-
[解決済み] position: iPadとiPhoneで固定が効かない。
-
[解決済み] MKMapViewのズームレベル設定
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] アプリのプッシュ通知設定をリセットする
-
[解決済み] プロダクションコードでNSLog()を使ってはいけないというのは本当ですか?
-
[解決済み] エラー : サービスは無効です
-
[解決済み] インスタンスからクラス名を取得する
-
[解決済み] Push Notificationのアラートテキストは何文字まで可能ですか?
-
[解決済み] UITableViewのセクション間のスペースを小さくする
-
[解決済み] UIImageのアスペクト比と幅を維持したリサイズ
-
[解決済み] 指定されたエンタイトルメント...プロファイルです。(0xE8008016)と表示されました。エラー iOS 4.2
-
[解決済み] iphoneシミュレーターでキーボードを使うにはどうしたらいいですか?
-
[解決済み] Objective-Cのプロトコルでプロパティを含むものはどう扱えばいいのか?