美文网首页
解决YYLabel多行显示不全时结尾无法以省略号显示的问题

解决YYLabel多行显示不全时结尾无法以省略号显示的问题

作者: 健了个平_24 | 来源:发表于2020-05-11 14:45 被阅读0次

使用YYLabel的最大好处就是能异步绘制最大程度保持界面流畅,可是默认情况下却在文本超出规定行数时却无法以省略号的样式展示。

设置一下YYLabellineBreakMode = NSLineBreakByTruncatingTail不就得了?
还真不行,毕竟YYLabel不是UILabel,底层实现不一样,这里有两种解决方案:

方案一

每次YYLabel设置了新的textLayout都重新设置一次YYLabellineBreakModeNSLineBreakByTruncatingTail

self.titleLabel.textLayout = titleLayout;
self.titleLabel.lineBreakMode = NSLineBreakByTruncatingTail;

PS:使用这个方案的前提是YYLabelignoreCommonProperties为 NO。(如果设置了ignoreCommonProperties属性为YES,文本显示的属性诸如textfonttextColorattributedTextlineBreakMode等将不可用,这是为了提高性能,尽可能将控件属性做静态处理)

方案二(推荐)

YYKit这么强大的库不可能不会不处理这种情况的,经查阅发现,是通过设置YYTextLayoutYYTextContainer来实现:设置truncationTypeYYTextTruncationTypeEnd即可。

UIFont *font = WTVPUGCProfilePlayView.videoTitleFont;
NSDictionary *attDic = @{NSFontAttributeName: font, NSForegroundColorAttributeName: WTVPUGCProfilePlayView.videoTitleColor};
NSAttributedString *attStr = [[NSAttributedString alloc] initWithString:videoTitle attributes:attDic];

YYTextContainer *container = [YYTextContainer containerWithSize:CGSizeMake(WTVPUGCProfilePlayView.videoTitleMaxWidth, 999)];
container.maximumNumberOfRows = WTVPUGCProfilePlayView.videoTitleMaxRows; // 最多2行
container.truncationType = YYTextTruncationTypeEnd; // 设置结尾处为省略号,默认只是截断
    
YYTextLayout *videoTitleLayout = [YYTextLayout layoutWithContainer:container text:attStr];
效果如上
不过乍一看这个省略号的字体跟标题字体不太一样,这里的标题为粗体,而这个省略号明显只是普通字体,这个还得设置YYTextContainer的另一个属性truncationToken来实现:这个属性可以自定义省略处的富文本。
container.truncationToken = [[NSAttributedString alloc] initWithString:@"..." attributes:attDic]; 

既然是个富文本,所以不仅可以设置文字,也可以自定义一些图片、按钮之类,这里只是同步了省略号的字体。


最终效果

这样就完全ojbk了。

今时今日YYKit还是很强大实用的👍。

相关文章

网友评论

      本文标题:解决YYLabel多行显示不全时结尾无法以省略号显示的问题

      本文链接:https://www.haomeiwen.com/subject/sdqlnhtx.html