使用YYLabel的最大好处就是能异步绘制最大程度保持界面流畅,可是默认情况下却在文本超出规定行数时却无法以省略号的样式展示。
设置一下YYLabel
的lineBreakMode = NSLineBreakByTruncatingTail
不就得了?
还真不行,毕竟YYLabel
不是UILabel
,底层实现不一样,这里有两种解决方案:
方案一
每次YYLabel
设置了新的textLayout
都重新设置一次YYLabel
的lineBreakMode
为NSLineBreakByTruncatingTail
。
self.titleLabel.textLayout = titleLayout;
self.titleLabel.lineBreakMode = NSLineBreakByTruncatingTail;
PS:使用这个方案的前提是YYLabel
的ignoreCommonProperties
为 NO。(如果设置了ignoreCommonProperties
属性为YES,文本显示的属性诸如text
、font
、textColor
、attributedText
、lineBreakMode
等将不可用,这是为了提高性能,尽可能将控件属性做静态处理)
方案二(推荐)
YYKit
这么强大的库不可能不会不处理这种情况的,经查阅发现,是通过设置YYTextLayout
的YYTextContainer
来实现:设置truncationType
为YYTextTruncationTypeEnd
即可。
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还是很强大实用的👍。
网友评论