小胖说事33-----iOS给Lable字体添加行间距

引子:有的时候,当你用UILable加载一段话的时候,由于那些字可能会很多,系统的布局之后的字间距会很挤,但是,UI设计会要求你,把字于字的间距调大一些,这时候就要程序猿敲代码改变字体的间距。接下来就给出实现这种效果的代码。另外,我在使用的时候,加了行间距之后,用

- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context方法,居然算出来的高度不准确。所以接下来也会给出解决方案。在这里用到了我以前写到的富文本控件NSTextattachment,链接http://blog.csdn.net/haogaoming123/article/details/46410359,大家可以去看看怎么实现图文混排的知识。


第一步:初始化一个UILable

UILabel *lable = [[UILabel alloc]initWithFrame:CGRectMake(0, 64, self.view.frame.size.width, 21)];
lable.numberOfLines = 0;


第二步:初始化NSMutableParagraphStyle
NSString *str = @"可以自己按照宽高,字体大小,来计算有多少行。。然后。。。每行画一个UILabel。。高度自己可以控制把这个写一个自定义的类。郝高明";
NSMutableAttributedString *attrit = [[NSMutableAttributedString alloc]initWithString:str];
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc]init];
style.lineSpacing = 5;  //设置文字行间距
[attrit addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0, [str length])];
lable.attributedText = attrit;


第三步:也就是计算高度的一步

[lable sizeToFit]; //系统自带的方法,可以自动将文字的高度布局到UILable上,这里计算有一个小问题,就是如果文字很少只有一行,则计算的宽度就会出现问题,欢迎大家加入顶部 QQ 群里一起交流解决方案。

第四步:添加UILable,并输出lable的高度

[self.view addSubview:lable];
NSLog(@"%@",NSStringFromCGRect(lable.frame));

在控制台打印的为:
2015-07-22 18:26:41.246 字体行间距[5410:209790] {{0, 64}, {34, 25.5}}

补充:NSMutableParagraphStyle里边有很多的属性:

style.lineSpacing = 10;//增加行高
style.headIndent = 10;//头部缩进,相当于左padding
style.tailIndent = -10;//相当于右padding
style.lineHeightMultiple = 1.5;//行间距是多少倍
style.alignment = NSTextAlignmentLeft;//对齐方式
style.firstLineHeadIndent = 20;//首行头缩进
style.paragraphSpacing = 10;//段落后面的间距
style.paragraphSpacingBefore = 20;//段落之前的间距

大家有什么不懂得或者需要想交流知识的,可以加顶部的QQ群,我在那里等你。。



你可能感兴趣的:(小胖说事33-----iOS给Lable字体添加行间距)