解決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];