解決YYLabel多行顯示不全時結(jié)尾無法以省略號顯示的問題

使用YYLabel的最大好處就是能異步繪制最大程度保持界面流暢,可是默認(rèn)情況下卻在文本超出規(guī)定行數(shù)時卻無法以省略號的樣式展示。

設(shè)置一下YYLabellineBreakMode = NSLineBreakByTruncatingTail不就得了?
還真不行,畢竟YYLabel不是UILabel,底層實(shí)現(xiàn)不一樣,這里有兩種解決方案:

方案一

每次YYLabel設(shè)置了新的textLayout都重新設(shè)置一次YYLabellineBreakModeNSLineBreakByTruncatingTail。

self.titleLabel.textLayout = titleLayout;
self.titleLabel.lineBreakMode = NSLineBreakByTruncatingTail;

PS:使用這個方案的前提是YYLabelignoreCommonProperties為 NO。(如果設(shè)置了ignoreCommonProperties屬性為YES,文本顯示的屬性諸如text、font、textColorattributedText、lineBreakMode等將不可用,這是為了提高性能,盡可能將控件屬性做靜態(tài)處理)

方案二(推薦)

YYKit這么強(qiáng)大的庫不可能不會不處理這種情況的,經(jīng)查閱發(fā)現(xiàn),是通過設(shè)置YYTextLayoutYYTextContainer來實(shí)現(xiàn):設(shè)置truncationTypeYYTextTruncationTypeEnd即可。

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; // 設(shè)置結(jié)尾處為省略號,默認(rèn)只是截斷
    
YYTextLayout *videoTitleLayout = [YYTextLayout layoutWithContainer:container text:attStr];

效果如上

不過乍一看這個省略號的字體跟標(biāo)題字體不太一樣,這里的標(biāo)題為粗體,而這個省略號明顯只是普通字體,這個還得設(shè)置YYTextContainer的另一個屬性truncationToken來實(shí)現(xiàn):這個屬性可以自定義省略處的富文本。

container.truncationToken = [[NSAttributedString alloc] initWithString:@"..." attributes:attDic]; 

既然是個富文本,所以不僅可以設(shè)置文字,也可以自定義一些圖片、按鈕之類,這里只是同步了省略號的字體。


最終效果

這樣就完全ojbk了。

今時今日YYKit還是很強(qiáng)大實(shí)用的??。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容