开发过程中,经常会遇到动态计算行高的问题,
- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(nullable NSDictionary<NSString *, id> *)attributes context:(nullable NSStringDrawingContext *)context NS_AVAILABLE(10_11, 7_0);
是苹果推荐的计算方法,显然会遇到段落格式问题,例如行间距、缩进等格式设置需求,attributes传进来的字典中,包含我们设置的字体及格式,其中NSParagraphStyleAttributeName是设置段落风格,NSFontAttributeName是设置字体。
ok,具体来看一下NSParagraphStyleAttributeName的功能。
- NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
- paragraphStyle.lineSpacing = 10;
- paragraphStyle.firstLineHeadIndent = 20.0f;
- paragraphStyle.alignment = NSTextAlignmentJustified;
- paragraphStyle.lineBreakMode = NSLineBreakByTruncatingTail;
- paragraphStyle.headIndent = 20;
- paragraphStyle.tailIndent = 20;
- paragraphStyle.minimumLineHeight = 10;
- paragraphStyle.maximumLineHeight = 20;
- paragraphStyle.paragraphSpacing = 15;
- paragraphStyle.paragraphSpacingBefore = 22.0f;
- paragraphStyle.baseWritingDirection = NSWritingDirectionLeftToRight;
- paragraphStyle.lineHeightMultiple = 15;
- paragraphStyle.hyphenationFactor = 1;
好了,现在就可以很轻松的计算某一段落高度,例如:
- _descAtt = [[NSMutableAttributedString alloc] initWithString:_model.desc];
- UIFont *descFont = [UIFont PingFangSC_Regular_WithSize:12];
-
- NSMutableParagraphStyle *descStyle = [[NSMutableParagraphStyle alloc]init];
- [descStyle setLineSpacing:1];
-
- CGSize descSize = [_model.desc boundingRectWithSize:CGSizeMake(w, MAXFLOAT)
- options:NSStringDrawingUsesLineFragmentOrigin
- attributes:@{NSFontAttributeName:descFont,
- NSParagraphStyleAttributeName :descStyle}
- context:nil].size;
另外,再介绍几个富文本处理的属性:
iOS-文本段落样式NSMutableParagraphStyle与NSParagraphStyle的使用和一些富文本处理属性
原文:https://www.cnblogs.com/CoderAlex/p/8848890.html