解决YYLabel多行显示不全时结尾没法以省略号显示的问题
使用YYLabel的最大好处就是能异步绘制最大程度保持界面流畅,但是默认状况下却在文本超出规定行数时却没法以省略号的样式展现。异步
设置一下YYLabel
的lineBreakMode = NSLineBreakByTruncatingTail
不就得了? 还真不行,毕竟YYLabel
不是UILabel
,底层实现不同,这里有两种解决方案:ide
方案一
每次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
便可。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)