我们在开发的中,有时候为了界面的美观,不论是新闻类、购物类还是阅读类app,因为文字量比较大,不能完全显示,就会在末尾显示省略号(如图一),我们都知道,如果不设置富文本的情况下,label的属性默认是在最后添加省略号的,但是通过富文本的形式设置行间距后,省略号就不会再显示(如图二),这样的效果会给用户带来一定的阅读障碍,所以我们需要解决这个问题,解决后效果展示(如图三)
默认样式:
图一
添加行间距样式:
图二
解决添加行间距后,末尾显示省略号样式:
图三
解决方法:
通过代码的运行,我们可以看出在设置富文本之后,lable的lineBreakMode属性样式被更改,我们只需要将lineBreakMode的样式改回省略号在末尾显示,就可以解决设置富文本之后在文末显示省略号的问题,代码如下:
- (void)viewDidLoad {
[super viewDidLoad];
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 120, [UIScreen mainScreen].bounds.size.width-40, 200)];
label.layer.borderColor = [UIColor darkGrayColor].CGColor;
label.font = [UIFont systemFontOfSize:24.0f];
label.layer.borderWidth = 0.5f;
label.numberOfLines = 3;
label.text = @"月考终于考完了,我花了九牛二虎之力,却还是考得不理想,我也只能“尽人事,听天命”,可是却难以忍受失败的痛苦滋味";
[self.view addSubview:label];
NSLog(@"未设置富文本的情况下的默认的lineBreakMode样式 : %ld",(long)label.lineBreakMode);
//富文本方式设置行间距
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc]init];
paragraphStyle.lineSpacing = 10.0f;
NSDictionary *attributes = @{ NSFontAttributeName:[UIFont systemFontOfSize:24.0f], NSParagraphStyleAttributeName:paragraphStyle};
label.attributedText = [[NSAttributedString alloc]initWithString:label.text attributes:attributes];
[label sizeToFit];
NSLog(@"设置富文本后,lineBreakMode样式 : %ld",(long)label.lineBreakMode);
//将lineBreakMode样式改回在末尾显示省略号的样式
label.lineBreakMode = NSLineBreakByTruncatingTail;
/*
NSParagraphStyle
typedef NS_ENUM(NSInteger, NSLineBreakMode) {
NSLineBreakByWordWrapping = 0, // Wrap at word boundaries, default
NSLineBreakByCharWrapping, // Wrap at character boundaries
NSLineBreakByClipping, // Simply clip
NSLineBreakByTruncatingHead, // Truncate at head of line: "...wxyz"
NSLineBreakByTruncatingTail, // Truncate at tail of line: "abcd..."
NSLineBreakByTruncatingMiddle // Truncate middle of line: "ab...yz"
} NS_ENUM_AVAILABLE(10_0, 6_0);
*/
}