解決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

相關文章
相關標籤/搜索