起因
最近在给一段文字增加padding时,使用了系统API boundingRectWithSize:options:attributes:context来计算可变文案的size,然后通过在该size下增加一个水平和垂直的padding并且文案居中对齐获得label/view的size。这样的做法在极端情况下会出现异常情况,由于view/label的最大size是固定好的,因此就算使用计算得到size最后还是只能使用label可以展示的最大size。最后的结果是正常长度的文案可以显示padding,但是过长的文案padding无效。
解决方案
这个问题的解决方式可以通过自行操作label中文案显示来解决。大致意思就是给定一个空的label,如何展示以及展示在什么位置由自己决定。
drawRect
使用这个方法可以在视图中绘制一些自己想要的图案。但是有一些注意事项:
1.这个方法不需要手动触发,当视图需要重新渲染或者视图发生变化会调用。2.可以通过在继承自uiView的子类中调用该方法来绘制图形。 具体的使用方式可以参考这篇文章中的写法。
https://www.jianshu.com/p/1aae00b4e440
drawTextInRect
使用此方法会在视图渲染的时候触发,只需要在其中设置文案的inset和rect。其中rect是渲染前已经是确定好的,因此只需要设置需要padding的值即可。
最终决定的解决方案是使用drawTextInrect
1 | - (void)drawTextInRect:(CGRect)rect { |