日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

uilabel 自行撑开高度_UILabel文本高度计算的那些事儿

發布時間:2023/12/15 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 uilabel 自行撑开高度_UILabel文本高度计算的那些事儿 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 計算文本在一行高度內的寬度

// 段落樣式

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];

paragraphStyle.lineSpacing = 6.0;

// 清除掉換行符(或者還要清除空白符,這個看自己需求)

// 要處理掉換行符,否則得不到正確的高度

NSString *intro = [self.columnDict.head.intro copy]; // 這個數據就是文本

intro = [intro stringByReplacingOccurrencesOfString:@"\r" withString:@""];

intro = [intro stringByReplacingOccurrencesOfString:@"\n" withString:@""];

CGRect introRect = [intro boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, 20)

options:0 attributes:@{

NSFontAttributeName:font(14),

NSParagraphStyleAttributeName:paragraphStyle

} context:nil];

CGFloat width = introRect.size.width;

// 如果width是小數,小數部分的寬度不會被渲染,不夠一個像素,所以最好向上取整

width = ceil(width);

boundingRectWithSize的第一個參數是CGSize. 一般會設置寬度固定,高度CGFLOAT_MAX來獲取在這種顯示寬度內的文本高度;或者設置寬度CGFLOAT_MAX,高度固定,來獲取某個高度內的文本寬度。比如上邊的一行高度內,文本有多長

2. 固定寬度,行數的文本高度(沒有設置行間距的情況下)

UILabel *label = [[UILabel alloc] init];

label.numberOfLines = 2;

label.text = self.columnDict.head.intro;

[label sizeToFit];

CGFloat height = label.bounds.size.height;

利用一個UILabel對象,來獲取渲染后的文本size,高度。

假設固定行數為2行,如果文本內容比較多,就可以直接用下邊的fontLineHeight * 2來設置高度(歡迎高手指正)

3. 固定寬度,行數的文本高度(有設置行間距的情況下)

CGFloat fontLineHeight = _descLabel.font.lineHeight; // 不同系統,字體下高度會和字號大小不同

// 2行,行間距6

CGFloat height = fontLineHeight * 2 + 6;

// 1行,行間距6

CGFloat height = fontLineHeight + 6;

以上兩種情況,假設一開始設定高度為2行,但是文本只有一行的時候,那么就直接使用fontLineHeight這個高度來設置Label的高度

4. 固定寬度,純粹獲取文本高度

CGRect introRect = [intro boundingRectWithSize:CGSizeMake(kScreenWidth, CGFLOAT_MAX)

options:0 attributes:@{

NSFontAttributeName:font(14),

NSParagraphStyleAttributeName:paragraphStyle

} context:nil];

CGFloat height = introRect.size.height;

kScreenWidth是一個獲取屏幕寬度的宏定義

boundingRectWithSize方法介紹:

size

限制最大寬高, 雖然是自適應, 但是需要限制最大的寬度和高度

options

一個枚舉, 繪制自定義方式字符串的選項,可以互相組合。例如:

NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading

enum {

NSStringDrawingTruncatesLastVisibleLine = 1 << 5,

NSStringDrawingUsesLineFragmentOrigin = 1 << 0,

NSStringDrawingUsesFontLeading = 1 << 1,

NSStringDrawingUsesDeviceMetrics = 1 << 3,

};typedef NSInteger NSStringDrawingOptions;

NSStringDrawingTruncatesLastVisibleLine :

如果文本內容超出指定的矩形限制,文本將被截去并在最后一個字符后加上省略號 . 如果三選項沒有選擇, 忽略此選項

NSStringDrawingUsesLineFragmentOrigin :

整個文本將以每行組成的矩形為單位計算整個文本的尺寸

NSStringDrawingUsesFontLeading :

以字體間的行距(leading,行距:從一行文字的底部到另一行文字底部的間距。)來計算高度

NSStringDrawingUsesDeviceMetrics :

計算布局時使用圖像符號邊界, 而不是排版的邊界

attributes

應用于字符串的文本樣式字典屬性

context

控制如何調整字間距和縮放。對象包含的信息將用于文本繪制。該參數可為 nil

返回值

返回一個矩形CGRect, 這個矩形為文字所占的矩形

總結

以上是生活随笔為你收集整理的uilabel 自行撑开高度_UILabel文本高度计算的那些事儿的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。