在 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.
2.
- NSStringDrawingTruncatesLastVisibleLine
3.
- NSStringDrawingUsesLineFragmentOrigin
- NSStringDrawingUsesFontLeading
通常使用
- NSStringDrawingUsesDeviceMetrics
,
- NSStringDrawingUsesLineFragmentOrigin
,整个文本将以每行组成的矩形为单位计算整个文本的尺寸。
- NSStringDrawingUsesLineFragmentOrigin
NSStringDrawingUsesFontLeading 则以字体间的行距(leading,行距:从一行文字的底部到另一行文字底部的间距。)来计算。
- NSStringDrawingTruncatesLastVisibleLine
attributes:根本文字的哪一种属性来进行计算
context:文字显示的像素 一般传 nil 采用系统默认
注:使用该方法时, 动态计算高度 不能设置 adjustToSize(该方法限制为一行)
来源: