解決NSAttributedString與UILabel高度自適應計算問題

兩個類擴展方法:字體

/**string

 *  修改富文本的顏色it

 *io

 *  @param str   要改變的stringtable

 *  @param color 設置顏色擴展

 *  @param range 設置顏色的文字範圍方法

 *tab

 *  @return 新的AttributedStringdi

 */co

- (NSMutableAttributedString *)setTextColorWithStr:(NSString *)str Color:(UIColor *)color Range:(NSRange)range;

 

/**

 *  修改富文本的字體

 *

 *  @param str   要改變的string

 *  @param font  設置字體

 *  @param range 設置字體的文字範圍

 *

 *  @return 新的AttributedString

 */

- (NSMutableAttributedString *)setTextFontWithStr:(NSString *)str Font:(UIFont *)font Range:(NSRange)range;

 

兩個類擴展方法的實現:

- (NSMutableAttributedString *)setTextColorWithStr:(NSString *)str Color:(UIColor *)color Range:(NSRange)range{

    if (str == nil) return nil;

    NSMutableAttributedString *newStr = [[NSMutableAttributedString alloc] initWithString:str];

    [newStr addAttribute:NSForegroundColorAttributeName value:color range:range];

    return newStr;

}

- (NSMutableAttributedString *)setTextFontWithStr:(NSString *)str Font:(UIFont *)font Range:(NSRange)range{

     if (str == nil) return nil;

     NSMutableAttributedString *newStr = [[NSMutableAttributedString alloc] initWithString:str];

    [newStr addAttribute:NSFontAttributeName value:font range:range];

    return newStr;

}

 

//消息內容frame

//先給定一個寬度,高度無限大

CGFloat CommenntWidth = 300;

    CGSize maxSize = CGSizeMake(CommenntWidth, MAXFLOAT);

//設定attributedString的字體及大小,必定要設置這個,不然計算出來的height是很是不許確的

    [attributedString addAttribute:NSFontAttributeName value:BKFont(16) range:RANGE(0, attributedString.length)];

//計算attributedString的rect

    _contentRect = [attributedString boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin context:nil];

 

此文爲原文,轉發請註明出處,謝謝!

相關文章
相關標籤/搜索