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

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

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

方案一

每次YYLabel设置了新的textLayout都从新设置一次YYLabellineBreakModeNSLineBreakByTruncatingTail。性能

self.titleLabel.textLayout = titleLayout;
self.titleLabel.lineBreakMode = NSLineBreakByTruncatingTail;
复制代码

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

方案二(推荐)

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

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];
复制代码

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

这样就彻底ojbk了。

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

(0)

相关推荐