計(jì)算文字的寬高

方法一 :ios7.0之前適用

/**
 @method 獲取指定寬度width,字體大小fontSize,字符串value的高度
 @param value 待計(jì)算的字符串
 @param fontSize 字體的大小
 @param Width 限制字符串顯示區(qū)域的寬度
 @result float 返回的高度
 */
- (float) heightForString:(NSString *)value fontSize:(float)fontSize andWidth:(float)width
{
    CGSize sizeToFit = [value sizeWithFont:[UIFont systemFontOfSize:fontSize]
                         constrainedToSize:CGSizeMake(width -16.0, CGFLOAT_MAX)
                             lineBreakMode:NSLineBreakByWordWrapping];
        //此處的換行類型(lineBreakMode)可根據(jù)自己的實(shí)際情況進(jìn)行設(shè)置
    return sizeToFit.height + 16.0;
}

方法二 :ios7.0及之后適用

/**
 @method 獲取指定寬度width,字體大小fontSize,字符串value的高度
 @param value 待計(jì)算的字符串
 @param fontSize 字體的大小
 @param Width 限制字符串顯示區(qū)域的寬度
 @result float 返回的高度
 */
- (float) heightForString:(NSString *)value andWidth:(float)width{
    //獲取當(dāng)前文本的屬性
    NSAttributedString *attrStr = [[NSAttributedString alloc] initWithString:value];
    _text.attributedText = attrStr;
    NSRange range = NSMakeRange(0, attrStr.length);
    // 獲取該段attributedString的屬性字典
    NSDictionary *dic = [attrStr attributesAtIndex:0 effectiveRange:&range];
    // 計(jì)算文本的大小
    CGSize sizeToFit = [value boundingRectWithSize:CGSizeMake(width - 16.0, MAXFLOAT) // 用于計(jì)算文本繪制時(shí)占據(jù)的矩形塊
                                               options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading // 文本繪制時(shí)的附加選項(xiàng)
                                            attributes:dic        // 文字的屬性
                                               context:nil].size; // context上下文。包括一些信息,例如如何調(diào)整字間距以及縮放。該對(duì)象包含的信息將用于文本繪制。該參數(shù)可為nil
    return sizeToFit.height + 16.0;
}

注意:再前兩種方法中,UITextView在上下左右分別有一個(gè)8pxpadding,需要將UITextView.contentSize.width減去16像素(左右的padding 2 x 8px)。同時(shí)返回的高度中再加上16像素(上下的padding),這樣得到的才是UITextView真正適應(yīng)內(nèi)容的高度。如代碼中 CGSizeMake(width -16.0, CGFLOAT_MAX),return sizeToFit.height + 16.0。 UILable中則不用

方法三:通用(推薦)

/**
 @method 獲取指定寬度width的字符串在UITextView上的高度
 @param textView 待計(jì)算的UITextView
 @param Width 限制字符串顯示區(qū)域的寬度
 @result float 返回的高度
 */
- (float) heightForString:(UITextView *)textView andWidth:(float)width{
     CGSize sizeToFit = [textView sizeThatFits:CGSizeMake(width, MAXFLOAT)];
    return sizeToFit.height;
}

補(bǔ)充:
UITableView中,設(shè)置cell的動(dòng)態(tài)高度,也可以使用第三種方法來進(jìn)行設(shè)置。
1、先在定義一個(gè)UILabel的變量(全局的),不往視圖上放。
2、給此變量進(jìn)行賦值,并計(jì)算計(jì)算高度。
3、重復(fù)第二個(gè)操作

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,790評(píng)論 1 92
  • 原來用Masonry計(jì)算TextView的時(shí)候不需要計(jì)算高度。如下,自適應(yīng)就可以了。 傳統(tǒng)的計(jì)算高度方法如下: 方...
    哈么么茶閱讀 11,987評(píng)論 6 7
  • 2018、2、19 郴州 晴 過年這幾天都在忙著走親戚,從年初一就忙到了今天了,天天吃吃喝喝,時(shí)...
    梅子日記閱讀 380評(píng)論 0 1
  • 大二下學(xué)期自學(xué)材料基本知識(shí),期末進(jìn)入陶瓷實(shí)驗(yàn)室,暑假留校一個(gè)月,之后半年時(shí)間邊實(shí)驗(yàn)邊參加課程學(xué)習(xí),后參加考研至今。...
    李澤遠(yuǎn)閱讀 913評(píng)論 0 0
  • 晚安,我懷念的,我憧憬的,都在慢慢繼續(xù)著
    我會(huì)發(fā)光啊idol閱讀 124評(píng)論 0 0