我相信不少人在开发者都有这样的需求,标签展现(以下图)数组
不少人均可以本身实现(网上别人写的也不少,可是别人写的总有不知足本身需求的点),实现的方法也不少种,好比动态添加view,使用UICollectionView等等。这种实现方法不是很差,可是当列表比较复杂,数据比较多的时候,可曾想过性能会怎么样呢?缓存
在一次深刻了解富文本的时候,突发其想,好像富文本能达到这种效果,也就是一个label就能够实现这种标签的效果了,效果性能就不用多说了,再加上YYLabel的异步绘制,真是锦上添花啊。app
XWTagView(高性能标签)异步
XWTagMaker(标签外观配置)布局
以上就是标签外观的一些属性,注释得很清楚,包含了对齐方式,每一个属性都有默认值,maxWidth这个属性是必须非空的以便计算高度和换行(默认值是屏幕宽度)性能
XWTagView(继承自YYLabel)测试
XWTagView.h字体
XWTagView.m主要代码atom
细心的同窗会发现要怎么知道他的高度?(固然若是您用的是自动布局能够不用管这个属性,毕竟label自动布局会自动自适应)从上面代码能够看出来,最后返回的是富文本NSMutableAttributedString,为了更加方便,我便为NSMutableAttributedString扩展了个高度属性tagHeight(当前标签富文本的高度以便外部获取使用和缓存),具体看如下代码spa
看起来很简单,也很容易理解(就是把标签数组变成一个富文本已达到标签的效果),接下来就看看怎么用吧
看起来是否是很简单,一个make就能够配置标签样式了,若是您是比较复杂的列表的话,这样一个label实现的标签性能彻底不用担忧,若是您是个追求性能的人,能够开启YYLabel的异步绘制displaysAsynchronously。效果图以下
tagLeft.png
tagRight.png
当我觉得大功告成的时候,最后仍是让我发现了个问题,从上面代码能够看出标签的的左右间隔是用空字符串隔开的(这是一个缺陷,有比较好的解决方法的能够联系我),说到这细心的同窗应该能够猜到是什么问题了,大家可曾注意过当label右对齐的时候,最右边的空格或者空字符串是不起做用的,最终想到了个解决办法,可能不是最好的解决方案,可是足以解决出现的问题,详细的见以下代码
熟悉富文本的同窗都知道tailIndent是与尾部的距离,利用好这一点能够很好的解决问题