molon / MLLabel

UILabel replacement with TextKit. Support link and expression.
MIT License
723 stars 115 forks source link

有表情和没表情的行间距不一样 #1

Closed ghost closed 9 years ago

ghost commented 9 years ago

20150813153732_1_7939392 有表情 和没有表情的行间距不一样 用之前的MLmojieLabel 没这个问题

molon commented 9 years ago

@doyanaml 问题提的好,把我难住了,暂时没想到比较合适的法子。有空我再研究研究。 简要说明下原因: TextKit是默认支持绘制图像的,只需要给予它图像的大小,而如果例如高度比字大的话,这一行绘制时候绘制区域肯定以其中最高的字符高度为准。然后设置行间距的话,TexiKit绘制是以行区域来间隔的。

所以就产生了看起来行间距不一样。实际上是一样的,只是我为了看起来合适,把图像的大小调整成了高于字体。

现在最新的commit里我去除了对表情进行增大处理,这样就没有此问题,但是看起来很诡异。这个原因主要还是微信的表情图片的内容有padding,而如果是新浪微博的表情的话就可以发现,是刚好和字体大小相等的,看起来应该就OK。

所以这种问题可以理解为不是BUG的BUG,特殊处理的话似乎也怪怪的。

但是似乎又有必要处理这个事,我有空想想法子吧。

molon commented 9 years ago

@doyanaml 刚刚抽空解决了下这个问题。 根据上楼所述,这个情况其实如果不出现反而是有问题。 我现在把表情高度定死和行高一致,并且表情宽度绘制时候根据行高自适应。

而如果想良好的实现效果,需要先对表情图片进行处理下。 我这边就在demo里加入了自动裁剪表情多余区域以及自动调整左右边距的方法,有需求的话可以直接调用进行表情裁剪以保证表情在头部底部没有空余空间。 https://github.com/molon/MLLabel/blob/e4beda4deb5a598cd9bb93a7d606a282f773d7aa/Example/MLLabel/ViewControllers/ClipExpressionViewController.m

此次commit: https://github.com/molon/MLLabel/commit/e4beda4deb5a598cd9bb93a7d606a282f773d7aa