iOS adjustsFontSizeToFitWidth 沒有作用

以及本文對開發中遇到的問題紀錄。

對於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));
    
    
    

親測可以

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章