iOS計算文本高度、寬度,帶有換行的字符串高度

這個就不多說了,直接上代碼。

一般計算方法

這個是計算文字的size的,也就是可以計算高度,也可以計算寬度。
以下方法中所有的字符串均使用self,因為使用的是NSStringcategory形式,這樣可以使用文字直接調(diào)用,如不符合您的需求,請自行修改為傳參方式

/**
 計算文字大小(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);
}

計算帶有換行符的字符串高度

一般情況下上述的方法已經(jīng)夠用了,但是有時候服務(wù)器給的文本是帶有很多換行符\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;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容