开发过程中,经常会遇到动态计算行高的问题,
- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(nullableNSDictionary<NSString *, id> *)attributes context:(nullable NSStringDrawingContext *)contextNS_AVAILABLE(10_11, 7_0);
是苹果推荐的计算方法,显然会遇到段落格式问题,例如行间距、缩进等格式设置需求,attributes传进来的字典中,包含我们设置的字体及格式,其中NSParagraphStyleAttributeName是设置段落风格,NSFontAttributeName是设置字体。
在使用这个函数去计算的时候返回的高度会出现不准确的现象
使用该方法的时候要注意 attributes:@{NSFontAttributeName:descFont,
NSParagraphStyleAttributeName :descStyle}
要对应上,不然就会出现返回的高度不准备的现象(一般都会偏小)
如下边的代码所示:
NSMutableAttributedString * muStr = [[NSMutableAttributedString alloc] initWithString:@"测试字符串"
UIFont *descFont = [UIFont PingFangSC_Regular_WithSize:12];
NSMutableParagraphStyle *descStyle = [[NSMutableParagraphStyle alloc]init];
[descStyle setLineSpacing:1];//行间距
CGSize descSize = [muStr boundingRectWithSize:CGSizeMake(w, MAXFLOAT)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:descFont,
NSParagraphStyleAttributeName :descStyle}
context:nil].size;
网友评论