(iOS)关于UILabel设置了attributedText富文本之后超出显示后没有省略号

很多时候我们绘制UI界面的时候,往往需要使用到富文本,比如一段话设置间距啊,设置不同的字号和颜色等等,但是设置了attributedText 后省略号不显示

1.一开始我没设置间距时是这样显示的:
小鹿优选.png
2.我要设置一段文字的间距(如图)
小鹿优选.PNG
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:model.title];

NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];

[paragraphStyle setLineSpacing:4*kHeightScale];

[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [model.title length])];

self.titleLabel.attributedText = attributedString;
3.我们可以发现,设置富文本后文字已经超出显示的部分竟然没有了省略号代替

于是找了下原因,原来我们设置text的时候也会自动设置lineBreakMode,但设置attributedText后,lineBreakMode就会失效,直接切断显示的内容,并且没用省略号代替

一行代码搞定:
感谢devHornet提供了更简便的方案:
设置完 self.titleLabel.attributedText = attributedString之后设置
self.titleLabel.lineBreakMode = NSLineBreakByTruncatingTail

当文字为一行时贴紧上面而不是显示在中间
解决方法是:暴力解决,直接文字拼接上\n换行

我们设置了UILabel的固定高度后,如果里面的内容填不上UILabel的高度,比如只有一行的时候,UILabel会吧文字自动的显示在UILabel的中间,如下图:

小鹿优选.png

这个问题比较好解决,只要拼接上换行好就好了@"\n"

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString: [[@"        " stringByAppendingString:model.title] stringByAppendingString:@"\n\n"]];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setLineSpacing:5*kHeightScale];
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [model.title length])];
self.titleLabel.attributedText= attributedString;
小鹿优选.png

新方法:

 - (id)initWithFrame:(CGRect)frame {

    return [super initWithFrame:frame];

}

- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {

    CGRect textRect = [super textRectForBounds:bounds limitedToNumberOfLines:numberOfLines];

    textRect.origin.y = bounds.origin.y;

    return textRect;

}

-(void)drawTextInRect:(CGRect)requestedRect {

    CGRect actualRect = [self textRectForBounds:requestedRect limitedToNumberOfLines:self.numberOfLines];

    [super drawTextInRect:actualRect];

}

------如果你有更好的解决方法,欢迎提出来!!!

我的前进是因为你的支持,谢谢曾经,现在以及未来一直支持关注我的人!谢谢你们!

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

推荐阅读更多精彩内容