以及本文对开发中遇到的问题纪录。
对于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));
亲测可以