开发中发现的一些容易忽略的冷知识(持续更新)

一、与UILabel相关的冷知识

1. 可以重写UILabel的这个方法来给Label增加内嵌边距

 - (void)drawTextInRect:(CGRect)rect;

效果如下:


拥有内嵌边距的UILabel样式,灰色视图是label

2. 利用UILabel来显示有段落格式的字符串发现的一些问题

A. 场景一:给label添加行间距,但不限制行数和高度,代码和效果如下:

NSMutableParagraphStyle *paraStyle = [[NSMutableParagraphStyle alloc] init];
paraStyle.lineSpacing = 10;
paraStyle.lineBreakMode = NSLineBreakByTruncatingTail;
NSAttributedString *attStr = [[NSAttributedString alloc] initWithString:label.text attributes:@{NSParagraphStyleAttributeName:paraStyle}];
label.attributedText = attStr;
有行间距,不限制行数和高度

B. 场景二:给label添加行间距,不限制高度,限制行数,代码和效果如下:

NSMutableParagraphStyle *paraStyle = [[NSMutableParagraphStyle alloc] init];
paraStyle.lineSpacing = 10;
paraStyle.lineBreakMode = NSLineBreakByTruncatingTail;
NSAttributedString *attStr = [[NSAttributedString alloc] initWithString:label.text attributes:@{NSParagraphStyleAttributeName:paraStyle}];
label.attributedText = attStr;
label.numberOfLines = 9;
有行间距,不限制高度,限制行数

C. 场景三:给label添加首行缩进,但不限制行数和高度,代码和效果如下:

NSMutableParagraphStyle *paraStyle = [[NSMutableParagraphStyle alloc] init];
paraStyle.firstLineHeadIndent = 34;
paraStyle.lineBreakMode = NSLineBreakByTruncatingTail;
NSAttributedString *attStr = [[NSAttributedString alloc] initWithString:label.text attributes:@{NSParagraphStyleAttributeName:paraStyle}];
label.attributedText = attStr;
有首行缩进,不限制行数和高度

D. 场景四:给label添加首行缩进,不限制高度,限制行数,代码和效果如下:

NSMutableParagraphStyle *paraStyle = [[NSMutableParagraphStyle alloc] init];
paraStyle.firstLineHeadIndent = 34;
paraStyle.lineBreakMode = NSLineBreakByTruncatingTail;
NSAttributedString *attStr = [[NSAttributedString alloc] initWithString:label.text attributes:@{NSParagraphStyleAttributeName:paraStyle}];
label.attributedText = attStr;
label.numberOfLines = 9;
有首行缩进,不限制高度,限制行数

E. 场景五:给label同时添加首行缩进和行高,但不限制行数和高度,代码和效果如下:

NSMutableParagraphStyle *paraStyle = [[NSMutableParagraphStyle alloc] init];
paraStyle.firstLineHeadIndent = 34;
paraStyle.lineSpacing = 10;
paraStyle.lineBreakMode = NSLineBreakByTruncatingTail;
NSAttributedString *attStr = [[NSAttributedString alloc] initWithString:label.text attributes:@{NSParagraphStyleAttributeName:paraStyle}];
label.attributedText = attStr;
同时添加行距和首行缩进,但不限制高度和行数

F. 场景五:给label同时添加首行缩进和行高,但不限制高度,限制行数,代码和效果如下:

NSMutableParagraphStyle *paraStyle = [[NSMutableParagraphStyle alloc] init];
paraStyle.firstLineHeadIndent = 34;
paraStyle.lineSpacing = 10;
paraStyle.lineBreakMode = NSLineBreakByTruncatingTail;
NSAttributedString *attStr = [[NSAttributedString alloc] initWithString:label.text attributes:@{NSParagraphStyleAttributeName:paraStyle}];
label.attributedText = attStr;
label.numberOfLines = 9;
同时添加行距和首行缩进,但不限制高度,限制行数

小结:当label的设定行数 < 文本的实际行数时,且label的文本同时还拥有行高和首行缩进的段落格式,自动布局时,label实际显示出来的高度是会多出一个行距的高度的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容