iOS移动开发进阶程序员买不来的iOS实用技巧

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

2016-04-19  本文已影响2956人  王隆帅

一、前言

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

五、完事

上一篇 下一篇

猜你喜欢

热点阅读