Closed NSaylor closed 8 years ago
在 [YYTextLayout layoutWithContainer:container text:text]; 这一句之前,需要把文本解析成表情。 如果用到了 textParser,那需要手动调用解析一下。
按照你说的 并没有解决这个问题,仔细的看了下。
label 已经设置了表情解析
纯文本 最后计算出来的高度是没问题的
纯表情 最后计算出来的高度不正确 有部分表情不会显示出来
但如果 不设置linePositionModifier (纯表情文本)表情会全部显示,只是无法统一控制行间距了。
已经正确解决该问题,谢谢指教。
其实之前没有理解手动解析的含义~
受益匪浅
涉及自定义表情的问题 在未设置linePositionModifier 时,自行设置属性文本的行间距等属性。最终发现有表情的那一行会高出一些,导致文本整体不统一。
//设置评论label NSMutableAttributedString *contentAtr = [[NSMutableAttributedString alloc]initWithString:strContent]; //设置文本属性 contentAtr.font = [UIFont fontWithName:DP_FONTNAME size:16]; contentAtr.color = [UIColor redcolor]; //行间距 contentAtr.lineSpacing = adoptLineSpacing(2.5); //字间距 [contentAtr addAttribute:NSKernAttributeName value:[NSNumber numberWithFloat:-0.5] range:NSMakeRange(0, strContent.length)];
self.lblContent.attributedText = contentAtr;
self.lblContent.frame =CGRectMake(10, 10, 200, self.lblContent.textLayout.textBoundingSize.height); //比如这里获得的高度为 137 --- self.lblContent.textLayout.textBoundingSize.height
为了解决上面间距不统一的问题,我设置了 self.lblContent.linePositionModifier 这个属性 取值为当前字号(16) + 所需间距 这样设置以后,有两个问题 1.当我设置的值小于 22 或者更小时 self.lblContent.textLayout.textBoundingSize.height 这个值会变为 118 导致我的Label有一部分内容是不会显示的
2.当设置的值大于22 时 self.lblContent.textLayout.textBoundingSize.height 这个值会变为 137 (22) 这是一个经验值,但不能满足我需要设置指定间距的要求。
再次尝试了文档中 的如下部分: // 完全控制: YYTextLinePositionSimpleModifier *modifier = [YYTextLinePositionSimpleModifier new]; modifier.fixedLineHeight = 24;
YYTextContainer *container = [YYTextContainer new]; container.size = CGSizeMake(100, CGFLOAT_MAX); container.linePositionModifier = modifier;
YYTextLayout layout = [YYTextLayout layoutWithContainer:container text:text]; YYLabel label = [YYLabel new]; label.size = layout.textBoundingSize;
/*_下面这句话会引发一些问题,高度是能够正确获得的,但表情都被显示成了编码_**/ label.textLayout = layout;
另外根据实际情况,YYTextView 不会出现这个问题。但唯一的区别是,SizeToFit 方法对YYTextView是生效的,对YYLabel无效。
希望能够给出一些思路,谢谢~