关于行间距lineSpacing
先贴出一张的的iOS中的的UILabel的默认排版样式: TB1ENuGgNSYBuNjSspjXXX73VXa-542-117.png大家也都能看出来,默认的排版样式中,文本的行间距很小,显得文本十分挤。
通常来说既然设计师要求的是行间距,那么我们直接设置lineSpacing就好但是的的UILabel是没有这么一个直接暴露的属性的,想要修改lineSpacing,我们需要借助NSAttributedString来实现,示意代码:
NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new];
paragraphStyle.lineSpacing = 10;
NSMutableDictionary *attributes = [NSMutableDictionary dictionary];
[attributes setObject:paragraphStyle forKey:NSParagraphStyleAttributeName];
label.attributedText = [[NSAttributedString alloc] initWithString:label.text attributes:attributes];
得出来效果:
TB1IBYSgStYBeNjSspkXXbU8VXa-542-195.png
正确的实现行间距
正确的效果: TB1vhuGgNSYBuNjSspjXXX73VXa-464-234.png红色区域是默认绘制单行文本会占用的区域,可以看到文字的上下是有一些留白的(蓝色和红色重叠的部分)。设计师是想要蓝色区域高度为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];
效果:
TB12OeAgH5YBuNjSspoXXbeNFXa-541-165.png
网友评论