1. 程式人生 > >解決NSAttributedString與UILabel高度自適應計算問題

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

兩個類擴充套件方法:

/**

 *  修改富文字的顏色

 *

 *  @param str   要改變的string

 *  @param color 設定顏色

 *  @param range 設定顏色的文字範圍

 *

 *  @return 新的AttributedString

 */

- (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];