iOS 无侵入实现段落样式控制(解决富文本单行显示中文问题)

前言

在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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏hightopo

基于 HTML5 WebGL 的 3D 网络拓扑图

20630
来自专栏牛客网

新鲜出炉的百度-春招-前端面经

1. 自我介绍 2. 项目经验,我说项目名说错了,然后又说了一遍,面试官不知道什么心态的鬼魅一下 3. Html5不同于以前版本的特点 4. Html5新增ap...

388110
来自专栏24K纯开源

ChartDirector应用笔记(一)

ChartDirector介绍 ChartDirector是一款小巧精细的商业图表库。其适用的语言范围非常广泛,包括.Net, Java, Asp, VB, ...

27570
来自专栏偏前端工程师的驿站

动手写个数字输入框1:input[type=number]的遗憾

前言  最近在用Polymer封装纯数字的输入框,开发过程中发现不少坑,也有很多值得研究的地方。本系列打算分4篇来叙述这段可歌可泣的踩坑经历: 《动手写个数字输...

29050
来自专栏AI研习社

Python Matplotlib 绘图使用指南 (附代码)

大多数人不会花大量时间去学 matplotlib 库,仍然可以实现绘图需求,因为已经有人在 stackoverflow、github 等开源平台上提供了绝大多数...

16220
来自专栏十月梦想

CSS3动画animation

        animation和上次说的transform动画有点不同,需要进行定义动画规则,而animation则无需受体,自动执行动画,translat...

10730
来自专栏tkokof 的技术,小趣及杂念

HGE系列之三 渐入佳境

前两次“乱七八糟”的讲述了一些HGE的基础知识,不知看过的朋友有何感想,反正我自己都觉着有些不知所谓(!),但本着坚持到底的原则,今天继续献上拙文一篇,如果有朋...

9820
来自专栏腾讯Bugly的专栏

Android自绘动画实现与优化实战——以Tencent OS录音机波形动画为实例

前言 我们所熟知的,Android 的图形绘制主要是基于 View 这个类实现。 每个 View 的绘制都需要经过 onMeasure、onLayout、onD...

44640
来自专栏HT

基于 HTML5 WebGL 的 3D 网络拓扑图

  在数据量很大的2D 场景下,要找到具体的模型比较困难,并且只能显示出模型的的某一部分,显示也不够直观,这种时候能快速搭建出 3D 场景就有很大需求了。但是搭...

35450
来自专栏慎独

AVPlayer初体验之视频解纹理

67540

扫码关注云+社区

领取腾讯云代金券