分享

iOS 9.0系统下字体宽度的计算处理

 sungkmile 2016-06-01

一、前言

在做项目的时候有计算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); }];

五、完事

著作权归作者所有

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多