美文网首页iOS开发
iOS计算文本高度、宽度,带有换行的字符串高度

iOS计算文本高度、宽度,带有换行的字符串高度

作者: 差不多先生__ | 来源:发表于2019-10-15 16:19 被阅读0次

    这个就不多说了,直接上代码。

    一般计算方法

    这个是计算文字的size的,也就是可以计算高度,也可以计算宽度。
    以下方法中所有的字符串均使用self,因为使用的是NSStringcategory形式,这样可以使用文字直接调用,如不符合您的需求,请自行修改为传参方式

    /**
     计算文字大小(size)
    
     @param fontSize 文字大小
     @param widht 文字宽度,如果为‘0’或者‘MAXFLOAT’或者‘CGFLOAT_MAX’,该方法为计算文字宽度
     @param height 文字高度,如果为‘0’或者‘MAXFLOAT’或者‘CGFLOAT_MAX’,该方法为计算文字高度
     @return 返回文字的size
     */
    - (CGSize)sizeWithFont:(CGFloat)fontSize textSizeWidht:(CGFloat)widht textSizeHeight:(CGFloat)height {
        
        if (widht == MAXFLOAT || widht == CGFLOAT_MAX || widht == 0) {
            CGRect rect = [self boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, height) options:NSStringDrawingTruncatesLastVisibleLine|   NSStringDrawingUsesFontLeading |NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:fontSize]} context:nil];
            return CGSizeMake(rect.size.width + 8, height);
        } else if (height == MAXFLOAT || height == CGFLOAT_MAX || height == 0) {
            CGRect rect = [self boundingRectWithSize:CGSizeMake(widht, CGFLOAT_MAX) options:NSStringDrawingTruncatesLastVisibleLine|   NSStringDrawingUsesFontLeading |NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:fontSize]} context:nil];
            
            return CGSizeMake(widht, rect.size.height + 8);
        }
        return CGSizeMake(0, 0);
    }
    

    计算带有换行符的字符串高度

    一般情况下上述的方法已经够用了,但是有时候服务器给的文本是带有很多换行符\n,这个时候用上述的方法计算文本高度的时候就不正确了,要用到下面这个方法

    /**
     计算文字高度,允许换行计算
    
     @param fontSize 文字大小
     @param widht 文字宽度
     @return 返回文字的高度
     */
    - (CGFloat)sizeLineFeedWithFont:(CGFloat)fontSize textSizeWidht:(CGFloat)widht {
        UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, widht, 0)];
        textView.text = self;
        textView.font = [UIFont systemFontOfSize:fontSize];
        CGSize size = CGSizeMake(widht, MAXFLOAT);
        CGSize constraint = [textView sizeThatFits:size];
        return constraint.height;
    }
    

    这个计算高度的方法里面也可以使用UILabel,方法一样,只是需要打开label.numberOfLines = 0;

    相关文章

      网友评论

        本文标题:iOS计算文本高度、宽度,带有换行的字符串高度

        本文链接:https://www.haomeiwen.com/subject/ejmsmctx.html