0%

YYLabel 显示表情并计算 Auto Layout 下的高度

前言

记录一下怎么用 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;
}