天天看点

关于TTTAttributedLabel中文行高和间距的计算问题

最近项目里需要处理文本解析,将一段文本中的<a href="xxxxx" target="_blank" rel="external nofollow" >这是一个链接</a>自动解析成:  (这是一个链接),点击响应跳转事件。

尝试使用了 TTTAttributedLabel,发现对中文支持不太好。主要是我这里需要根据文本计算行高。 

- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode;

使用以上方法计算的行高与TTTAttributedLabel实际绘制文本所需要的行高不一致,会比实际所需的要少。(实测英文一般没问题,使用长短不同文本多次测试,发现也有略微高度不匹配情况,但不明显)。

这里使用的是默认字体设置,比如[UIFontsystemFontOfSize:13]。

目前找到个暂时的解决方案,uifont使用中文字体:"STHeitiJ-Light"。这样能保证计算出来的行高满足TTTAttributedLabel绘制所需。

但是还有个问题,这样计算的行高有时候会比实际绘制的要高,结果就是文本会有那么一两行空白。

观察发现设置中文字体后行间距变小了,于是考虑设置较大的行间距以补漏,但是尝试设置label的leading仍无法完美解决.

(由于我这边labe的宽度是固定的,字体大小也是固定的,我尝试设置了一个较为合适的leading值。目前暂时这么解决了,感觉比较山寨。)

以后抽时间得好好研究下Coretext。

如果哪位有完美的解决方案,望能分享,多谢