NSMutableParagraphStyle *muStyle = [[NSMutableParagraphStyle alloc]init];
muStyle.lineSpacing = 10;//设置行间距离
muStyle.alignment = NSTextAlignmentLeft;//对齐方式
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:model.mContent];
[attrString addAttribute:NSFontAttributeName value: H15 range:NSMakeRange(0, attrString.length)];
[attrString addAttribute:NSParagraphStyleAttributeName value:muStyle range:NSMakeRange(0, attrString.length)];
self.titleLabel.attributedText = attrString;
然后看下效果图:

红色区域是默认绘制单行文本会占用的区域,可以看到文字的上下是有一些留白的(蓝色和红色重叠的部分)。设计师是想要蓝色区域高度为 10pt,而我们直接设置 lineSpacing 会将两行红色区域中间的绿色区域高度设置为 10pt,这就是问题的根源了。
那么这个红色的区域高度是多少呢?答案是 label.font.lineHeight,它是使用指定字体绘制单行文本的原始行高。
知道了原因后问题就好解决了,我们需要在设置 lineSpacing 时,减去这个系统的自带边距:
NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new];
paragraphStyle.lineSpacing = 10 - (label.font.lineHeight - label.font.pointSize);
NSMutableDictionary *attributes = [NSMutableDictionary dictionary];
[attributes setObject:paragraphStyle forKey:NSParagraphStyleAttributeName];
label.attributedText = [[NSAttributedString alloc] initWithString:label.text attributes:attributes];
这次再看效果图,就跟设计图一样了。

网友评论