// 段落樣式 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,高度固定,來獲取某個高度內的文本寬度。好比上邊的一行高度內,文本有多長佈局
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
來設置高度(歡迎高手指正)code
CGFloat fontLineHeight = _descLabel.font.lineHeight; // 不一樣系統,字體下高度會和字號大小不一樣 // 2行,行間距6 CGFloat height = fontLineHeight * 2 + 6; // 1行,行間距6 CGFloat height = fontLineHeight + 6;
以上兩種狀況,假設一開始設定高度爲2行,可是文本只有一行的時候,那麼就直接使用
fontLineHeight
這個高度來設置Label的高度對象
CGRect introRect = [intro boundingRectWithSize:CGSizeMake(kScreenWidth, CGFLOAT_MAX) options:0 attributes:@{ NSFontAttributeName:font(14), NSParagraphStyleAttributeName:paragraphStyle } context:nil]; CGFloat height = introRect.size.height;
kScreenWidth
是一個獲取屏幕寬度的宏定義ci
boundingRectWithSize
方法介紹:字符串
限制最大寬高, 雖然是自適應, 可是須要限制最大的寬度和高度
一個枚舉, 繪製自定義方式字符串的選項,能夠互相組合。例如: NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
enum { NSStringDrawingTruncatesLastVisibleLine = 1 << 5, NSStringDrawingUsesLineFragmentOrigin = 1 << 0, NSStringDrawingUsesFontLeading = 1 << 1, NSStringDrawingUsesDeviceMetrics = 1 << 3, };typedef NSInteger NSStringDrawingOptions;
NSStringDrawingTruncatesLastVisibleLine :string
若是文本內容超出指定的矩形限制,文本將被截去並在最後一個字符後加上省略號 . 若是三選項沒有選擇, 忽略此選項
NSStringDrawingUsesLineFragmentOrigin :it
整個文本將以每行組成的矩形爲單位計算整個文本的尺寸
NSStringDrawingUsesFontLeading :io
以字體間的行距(leading,行距:從一行文字的底部到另外一行文字底部的間距。)來計算高度
NSStringDrawingUsesDeviceMetrics :table
計算佈局時使用圖像符號邊界, 而不是排版的邊界
應用於字符串的文本樣式字典屬性
控制如何調整字間距和縮放。對象包含的信息將用於文本繪製。該參數可爲 nil
返回一個矩形CGRect, 這個矩形爲文字所佔的矩形