解決YYLabel多行顯示不全時結尾無法以省略號顯示的問題
阿新 • • 發佈:2020-06-24
使用YYLabel的最大好處就是能非同步繪製最大程度保持介面流暢,可是預設情況下卻在文字超出規定行數時卻無法以省略號的樣式展示。
設定一下YYLabel
的lineBreakMode = NSLineBreakByTruncatingTail
不就得了?
還真不行,畢竟YYLabel
不是UILabel
,底層實現不一樣,這裡有兩種解決方案:
方案一
每次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
即可。
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還是很強大實用的?。