您的位置:首页 > 移动开发 > IOS开发

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

2015-07-22 18:55 525 查看
引子:有的时候,当你用UILable加载一段话的时候,由于那些字可能会很多,系统的布局之后的字间距会很挤,但是,UI设计会要求你,把字于字的间距调大一些,这时候就要程序猿敲代码改变字体的间距。接下来就给出实现这种效果的代码。另外,我在使用的时候,加了行间距之后,用
- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options context:(NSStringDrawingContext *)context方法,居然算出来的高度不准确。所以接下来也会给出解决方案。在这里用到了我以前写到的富文本控件NSTextattachment,链接/article/1616125.html,大家可以去看看怎么实现图文混排的知识。

第一步:初始化一个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群,我在那里等你。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: