使用YYLabel的最大好處就是能異步繪制最大程度保持界面流暢,可是默認(rèn)情況下卻在文本超出規(guī)定行數(shù)時卻無法以省略號的樣式展示。
設(shè)置一下YYLabel的lineBreakMode = NSLineBreakByTruncatingTail不就得了?
還真不行,畢竟YYLabel不是UILabel,底層實(shí)現(xiàn)不一樣,這里有兩種解決方案:
方案一
每次YYLabel設(shè)置了新的textLayout都重新設(shè)置一次YYLabel的lineBreakMode為NSLineBreakByTruncatingTail。
self.titleLabel.textLayout = titleLayout;
self.titleLabel.lineBreakMode = NSLineBreakByTruncatingTail;
PS:使用這個方案的前提是YYLabel的ignoreCommonProperties為 NO。(如果設(shè)置了ignoreCommonProperties屬性為YES,文本顯示的屬性諸如text、font、textColor、attributedText、lineBreakMode等將不可用,這是為了提高性能,盡可能將控件屬性做靜態(tài)處理)
方案二(推薦)
YYKit這么強(qiáng)大的庫不可能不會不處理這種情況的,經(jīng)查閱發(fā)現(xiàn),是通過設(shè)置YYTextLayout的YYTextContainer來實(shí)現(xiàn):設(shè)置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; // 設(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í)用的??。