前言
在iOS开发中,文本格式(富文本)处理是一个比较麻烦的问题(我们姑且说它是麻烦的)。这里我提两点比较蛋疼的地方:
1、使用UILabel/UITextView的setText:方法,显示出来的文本行间距看起来略显紧凑。
系统的setText:方法显示效果2、当我们开心的使用NSParagraphStyle设置行间距,并且使用setAttributedText:方法给UILabel/UITextView赋值时,另外一个蛋疼的问题又出现了,当我们显示的文本是 一行并且包含中文 的时候,那个该死的行间距居然还有。
单行仍然有行间距解决思路
针对问题1,有人肯定会说用富文本不就行了呗。确实,这样可以直接的达到效果,但是如果你的项目相当庞大,调用setText:方法千万遍,你要逐字逐句的修改么?
而且对于展示文本,我们的段落样式多半是相同的,所以这里我就考虑使用runtime交换setText:和customText:方法,然后实现customText:,通过最终使用setAttributedText:实现段落样式。优点非常明显,无侵入,全局修改。
完成以上的步骤,现在我们可以认为所有的文本赋值最终的落脚点都是setAttributedText:方法,那么就来解决第二个问题吧。
解决第二个问题的思路是很简单的,我们只需要判断如果文本只有一行并且包含中文的时候(因为纯英文的时候不会出现这种bug),重新给NSAttributedString赋值NSParagraphStyle,将lineSpacing(行间距)去掉。
问题就落在如何判断一个富文本只有一行。逻辑就是:
(总高度 - font.lineHeight <= 行间距) && (包含中文)
结语
解决这些问题没有使用什么奇淫技巧,总要的是解决问题的思路。我这里封装了一个分类,大家可以直接拿来用也可以在里面直接修改。
DEMO地址:https://github.com/indulgeIn/YBCustomParagraphStyle
网友评论