在OC當中自動計算行高主要調用系統的
- (--boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(nullable NSDictionary<NSString *, id> *)attributes context:(nullable NSStringDrawingContext *)context NS_AVAILABLE(10_11, 7_0);
不同的ios系統下 相同字體的高度大小是不同的 所以不能設置具體的高度值來做限制
解決辦法:
label.text = @"xijoaiogioaiogioioaig"; label.numberOfLines = 2; NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc]init]; style.maximumLineHeight = 20; style.minimumLineHeight = 20; CGRect rect = [label.text boundingRectWithSize:CGSizeMake(Screen_W - 125, 20*2) options: NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:_comName.font,NSParagraphStyleAttributeName:style} context:nil]; _height = rect.size.height;
下面是對該方法的詳解
size:label或文本顯示的寬高,通常在自動計算寬高時 若寬度固定為某一值100 則設置為CGSizeMake (100,MAXFLOAT) 若高度固定為某一值100,則設置為CGSizeMake (MAXFLOAT,100)若寬高都確定則都設置為具體值
options:
文本繪制時的附加選項。
有四種類型:
1.NSStringDrawingTruncatesLastVisibleLine
2.NSStringDrawingUsesLineFragmentOrigin
3.NSStringDrawingUsesFontLeading
4.NSStringDrawingUsesDeviceMetrics
通常使用NSStringDrawingUsesLineFragmentOrigin
,NSStringDrawingUsesLineFragmentOrigin
,整個文本將以每行組成的矩形為單位計算整個文本的尺寸。
NSStringDrawingUsesFontLeading則以字體間的行距(leading,行距:從一行文字的底部到另一行文字底部的間距。)來計算。
NSStringDrawingTruncatesLastVisibleLine
或者NSStringDrawingUsesDeviceMetric
,那麼計算文本尺寸時將以每個字或字形為單位來計算。
attributes:根本文字的哪一種屬性來進行計算
context:文字顯示的像素 一般傳nil采用系統默認
注:使用該方法時, 動態計算高度不能設置adjustToSize(該方法限制為一行)