一、前言
在做项目的时候有计算label的宽度适配UI的要求,之前也总结了Category是计算label自适应高度及宽度,然后发现在9系统下总是出现'...'就是显示不全,所以在此记录一下解决方法希望能帮助有同样需求的人。
二、之前的Category方法
#pragma mark - 计算字符串尺寸
/**
* 计算字符串高度 (多行)
*
* @param width 字符串的宽度
* @param font 字体大小
*
* @return 字符串的尺寸
*/
- (CGSize)heightWithWidth:(CGFloat)width andFont:(CGFloat)font {
NSDictionary *attribute = @{NSFontAttributeName: [UIFont systemFontOfSize:font]};
CGSize size = [self boundingRectWithSize:CGSizeMake(width, MAXFLOAT) options:(NSStringDrawingUsesFontLeading|NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin) attributes:attribute context:nil].size;
return size;
}
/**
* 计算字符串宽度
*
* @param height 字符串的高度
* @param font 字体大小
*
* @return 字符串的尺寸
*/
- (CGSize)widthWithHeight:(CGFloat)height andFont:(CGFloat)font {
NSDictionary *attribute = @{NSFontAttributeName: [UIFont systemFontOfSize:font]};
CGSize size = [self boundingRectWithSize:CGSizeMake(MAXFLOAT, height) options:(NSStringDrawingUsesFontLeading|NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin) attributes:attribute context:nil].size;
return size;
}
三、原因
iOS9的字体大小与之前的版本字体大小不一样。
起码, 在systemFont下是这样。
举例说,字符串在 label上显示,label的
font = [UIFont systemFontOfSize:13]
在iOS 8下,需要占用的宽度为40.f,但在iOS9下,就可能需要45.f.
四、解决方法
在label初始化的时候添加如下函数:
adjustsFontSizeToFitWidth
举例如下:
- (UILabel *)priceLabel {
if (!_priceLabel) {
_priceLabel = [[UILabel alloc] init];
_priceLabel.font = H16;
_priceLabel.textColor = UIColorFromRGB(0xE71414);
_priceLabel.textAlignment = NSTextAlignmentRight;
[_priceLabel adjustsFontSizeToFitWidth];
}
return _priceLabel;
}
在布局的时候不用考虑宽度,如下:
[self.priceLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.right.equalTo(-10);
make.centerY.equalTo(weakSelf.nameLabel);
make.height.equalTo(21);
}];
网友评论
是通过换字体解决的吗?