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

亲测可以

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