前言
记录一下怎么用 YYLabel 显示表情并计算 Auto Layout 下的高度。
代码
1 2 3 4 5
| - (void)awakeFromNib { [super awakeFromNib]; self.contentTextLabel.preferredMaxLayoutWidth = [[UIScreen mainScreen] bounds].size.width - 28 - 70 - 20*2; // Initialization code }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| - (void)setMessage:(RTMMessage *)message { [super setMessage:message]; RTMMessageTextObject * object = (RTMMessageTextObject *)message.contentObject; NSMutableAttributedString * text = [[NSMutableAttributedString alloc] initWithString:object.content]; text.yy_font = [UIFont systemFontOfSize:17]; YYTextSimpleEmoticonParser * parser = [YYTextSimpleEmoticonParser new]; parser.emoticonMapper = [RTMEmotionManager sharedInstance].emotionDict; self.contentTextLabel.attributedText = text;; [parser parseText:text selectedRange:nil]; YYTextContainer * container = [YYTextContainer new]; container.size = CGSizeMake(self.contentTextLabel.preferredMaxLayoutWidth, CGFLOAT_MAX); YYTextLayout * layout = [YYTextLayout layoutWithContainer:container text:text]; self.contentTextLabel.textLayout = layout; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| + (CGFloat)heightForMessage:(RTMMessage *)message { static RTMSendTextCell * cell = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ cell = [[NSBundle mainBundle] loadNibNamed:@"RTMSendTextCell" owner:nil options:nil][0]; }); RTMMessageTextObject * object = (RTMMessageTextObject *)message.contentObject;
NSMutableAttributedString * text = [[NSMutableAttributedString alloc] initWithString:object.content]; text.yy_font = [UIFont systemFontOfSize:17]; YYTextSimpleEmoticonParser * parser = [YYTextSimpleEmoticonParser new]; parser.emoticonMapper = [RTMEmotionManager sharedInstance].emotionDict; cell.contentTextLabel.attributedText = text;; [parser parseText:text selectedRange:nil]; YYTextContainer * container = [YYTextContainer new]; container.size = CGSizeMake(cell.contentTextLabel.preferredMaxLayoutWidth, CGFLOAT_MAX); YYTextLayout * layout = [YYTextLayout layoutWithContainer:container text:text]; message.cellHeight = layout.textBoundingSize.height; return message.cellHeight; }
|