在iOS上获取文字大小

我目前正在使用使用第三方聊天软件的iPhone应用程序。 向其中添加一些自定义消息类型需要在显示单元格之前计算收集单元格的高度。 我不记得所有的iOS API,但是在Google上进行的快速搜索只是显示了一个UIFont扩展名,该扩展名可以计算文本框(UILabel或TextView)的大小。 就像这样:

回到Google,寻找错误报告或可以告诉我为什么这么简单的东西不能与表情符号一起使用的东西。 我使用UILabel sizeToFit方法找到了一些要求相同的帖子,一个指向了我已经知道的方向。 好的,每次需要一个单元格高度时都创建一个UILabel并不完美,但是此集合视图会缓存高度,因此我可以忍受。 更改了我的方法以使用sizeToFit而不是boundingRectWithSize和… FAIL

使用sizeToFit返回的大小与boundingRectWithSize相同,我无法相信这两个方法都忽略了表情符号。 那是片刻停下来思考的时刻:“应该有一种方法可以做到这一点,但可能并不那么容易”。 这使我开始寻找在iOS中获取文字大小的简单方法。 我的第一次搜索与CoreText有关,并且得到的结果指出了正确的方向:CTFramesetter

这是我从未使用过的东西,但却是我唯一的选择,因此我去了官方API文档并再次更改了扩展方法以使用它。 结果? 有效!!

我不确定速度有多快,但已解决了我遇到的重大问题。 如果您发现相同的问题,希望您能找到这篇文章,然后可以将以下代码复制粘贴到您的应用中:

希望我能节省一些时间给下一个尝试根据宽度限制计算文本高度的人,如果有人知道更好的方法,请分享!