使用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
今時今日YYKit仍是很強大實用的👍。code