1. 程式人生 > IOS開發 >解決YYLabel多行顯示不全時結尾無法以省略號顯示的問題

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

使用YYLabel的最大好處就是能非同步繪製最大程度保持介面流暢,可是預設情況下卻在文字超出規定行數時卻無法以省略號的樣式展示。

設定一下YYLabellineBreakMode = NSLineBreakByTruncatingTail不就得了? 還真不行,畢竟YYLabel不是UILabel,底層實現不一樣,這裡有兩種解決方案:

方案一

每次YYLabel設定了新的textLayout都重新設定一次YYLabellineBreakModeNSLineBreakByTruncatingTail

self.titleLabel.textLayout = titleLayout;
self
.titleLabel.lineBreakMode = NSLineBreakByTruncatingTail; 複製程式碼

PS:使用這個方案的前提是YYLabelignoreCommonProperties為 NO。(如果設定了ignoreCommonProperties屬性為YES,文字顯示的屬性諸如textfonttextColorattributedTextlineBreakMode等將不可用,這是為了提高效能,儘可能將控制元件屬性做靜態處理)

方案二(推薦)

YYKit這麼強大的庫不可能不會不處理這種情況的,經查閱發現,是通過設定YYTextLayoutYYTextContainer

來實現:設定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; // 設定結尾處為省略號,預設只是截斷 YYTextLayout *videoTitleLayout = [YYTextLayout layoutWithContainer:container text:attStr]; 複製程式碼

效果如上
不過乍一看這個省略號的字型跟標題字型不太一樣,這裡的標題為粗體,而這個省略號明顯只是普通字型,這個還得設定YYTextContainer的另一個屬性truncationToken來實現:這個屬性可以自定義省略處的富文字。

container.truncationToken = [[NSAttributedString alloc] initWithString:@"..." attributes:attDic]; 
複製程式碼

既然是個富文字,所以不僅可以設定文字,也可以自定義一些圖片、按鈕之類,這裡只是同步了省略號的字型。

最終效果
這樣就完全ojbk了。

今時今日YYKit還是很強大實用的?。