以及本文對開發中遇到的問題紀錄。
對於UILabel 如果想讓文字在固定寬度內,適應寬度,就是文字越多,字體越少,但是當使用 富文本attributedText 的時候,字體就不會變小,在固定寬度時,字體會出現...
那如何解決呢?
因爲對於UILabel的富文本,可能會出現不同的字體樣式,比如一部分字體大一部分字體小,那我們可以計算出在固定的寬度內,計算出需要顯示的問題的一個比值,然後 將富文本的uifont 的 值 進行縮小,但這樣會有一個問題,就是對於不同的富文本內容,可能有的顯示的剛好,有的還是會有省略號,代碼如下:
if (attri.size.width > newCountWidth(258)) {
[attri enumerateAttribute:NSFontAttributeName inRange:NSMakeRange(0, attri.length) options:(NSAttributedStringEnumerationReverse) usingBlock:^(id _Nullable value, NSRange range, BOOL * _Nonnull stop) {
UIFont *font = value;
CGFloat scale2 = newCountWidth(258) / attri.size.width ;
UIFont *newFont = kMediumFont(scale2 * font.pointSize);
[attri setAttributes:@{NSFontAttributeName:newFont} range:range];
}];
}
那目前我們的處理方式就是 使用do while 進行減小font的值,每次減少0.01 直到一個合適的大小, 代碼如下:
/*
所以遍歷 NSAttributedString 來實現 scaleFactor 方法
來達到label可以放得下 NSAttributedString的效果
*/
do {
[attri enumerateAttribute:NSFontAttributeName inRange:NSMakeRange(0, attri.length) options:(NSAttributedStringEnumerationReverse) usingBlock:^(id _Nullable value, NSRange range, BOOL * _Nonnull stop) {
UIFont *font = value;
UIFont *newFont = kMediumFont(font.pointSize * 0.99);
[attri setAttributes:@{NSFontAttributeName:newFont} range:range];
}];
} while (attri.size.width > newCountWidth(258));
親測可以