问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

动态计算NSAttributedString的宽高的方法

发布网友 发布时间:2024-10-12 13:47

我来回答

1个回答

热心网友 时间:2024-11-02 22:19

最近在复盘之前项目中关于文本宽高计算的实现, 这里简单归纳总结一下.

文本的宽高计算的API主要有如下方法:

另外关于配置options:

官方文档中有部分注释:

因此, 是计算多行文本信息在 NSStringDrawingOptions 选项, 一般需要添加如下的配置, 不然计算出来的高度不准确:

特殊情况: 使用该方法计算完文本中中有 \n 或者 \r\n , 会导致计算宽高不准确, 这里贴一个网上针对这个问题的解决方法(但是本人并不建议这样做):

这里以指定的UILabel来作为富文本展示示例

最后展示出来两者大小差不多的, 但是注意第一条中使用 ceil 向上取整操作!

网上关于CoreText相关信息非常多, 简单来说就是使用iOS系统的排版, 然后通过排版以后结果信息来获取系统排版渲染以后的结果.

常见使用CTFrame计算文本高度有三种方法, 其中建议使用 CTFramesetterSuggestFrameSizeWithConstraints 进行计算

网上也有使用 intrinsicContentSize 结合 preferredMaxLayoutWidth 计算自适应高度的内容

UIlabel拥有 intrinsicContentSize 方法调用逻辑可能如下:

https://www.jianshu.com/p/6ed98368ceed

https://my.oschina.net/FEEDFACF/blog/1858685
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
ef英语哪个好 EF英孚英语培训怎么样? 英孚英语好不好 EF英孚教育到底好不好 大佬们,麦芒7和荣耀10那个值得入手?2500以下的机子还有啥好推荐的么... 介绍几款2500元以前的手机 像素一定要高 其他的不做要求 近期想入手一部安卓手机,价格2200到2500左右…买HTC desire Z还是 三星... 笔记本忘记开机密码怎么办急死了 笔记本电脑屏幕开机锁忘记密码 怎么办?急死了 华硕笔记本电脑开机密码忘记了怎样找回?系统是Windows 7旗舰版... 英雄联盟的深海泰坦怎么玩? 英雄联盟那如何玩泰坦 烟雨江湖乙型傀儡怎么用 制作方法及作用介绍 10561 怎样在球面上「均匀」排列许多点?(下) 哪个分式最接近黄金分割?最好不出现根号,直接数字 黄金分割点分式是多少? 我建了一个FTP服务器,想梆定一个域名,发布到internet上,怎么做_百度知 ... 如何把一个图层变成另外一个图层的效果 蔡桓公说,他的身体没有什么病也没有,改为直接引述句 扁鹊说蔡桓公的病在什么地方? 函数的图象不经过( )A、第一象限B、第二象限C、第三象限D、第四象限 ...的图象在( ) A.第一、三象限 B.第二、四象限 C.第一、二象限 D.第... ...A.第四象限 B.第三象限 C.第二象限 D.第一象 函数y=2|x|的图象在( )A.第一,三象限B.第一,二象限C.第二,四象限D.第... 函数y=x的图象在( )A.第一、三象限B.第二、四象限C.第一象限D.第... 如果,那么函数 的图象在( ) A.第一、二、三象限 B.第一、三、四象限 C... ...A.第一,二象限 B.第一,三象限 C.第二,四象限 D.第三,四 未经过加工的马奶可以喝吗 帕萨特倒车雷达蜂鸣器在哪里 帕萨特倒车雷达蜂鸣器在哪 西丰到沈阳的火车何时开通,每天几趟车次 请问他发明了湿度计吗? <<希望英语>>中2008年1月27号~2008年2月7号的所有单词和词组_百度知 ... 谁知道2008年2月5日-2月16日希望英语的单词? 液氮罐液氮罐主要用途 淘宝联盟数据抓取需要多大?淘宝联盟怎么查看导出数据? goth断掌事件的电影的两个问题 快乐的人永远都会快乐吗 大家给我一篇文章吧《快乐的人》 ...自己也变得很不幸运,跟快乐的人一起,自己也很快乐 快乐的人作品歌词 你觉得学生该不该恋爱,几岁恋爱不算早恋? 如何使用花生壳让外网访问我的JSP项目? 甲数是108,是乙数的3倍.甲、乙两数的和是多少 甲数是108,是乙数的3倍。甲、乙两数的和是多少?求算式过程 甲数是乙数的3倍,甲、乙两数的和是104,乙数是多少?(列式计算) 迪克牛仔和动力火车长相的区别 尼康(Nikon) D5200 单反套机拍照视频效果怎么样? RAYS是什么 哪种熊类仓鼠好养活,好看,亲人? oppofind7插上充电器闪充两下就没了怎么回事