iOS 根据给定的富文本属性和宽高精确排版

229 阅读1分钟

根据给定的富文本和指定的frame,来处理文本的排版,返回排版后的String数组

NSString boundingRect是计算并返回当前富文本的CGRect,无法满足要求

其核心是Core Text.

Core Text是一种高级的底层技术,用于布置文本和处理字体。

Core Text布局引擎高性能,本质是基于C语言的一套API。

好了,扫盲完毕。

                                                                      Font metrics

UIFont lineHeight会返回固定的高度,如果是空行或者是各种编码的文本,文本的真实高度其实是会有略微的误差的

                                                             Core Text 层次结构

计算每行的行高:

var ascent: CGFloat = 0

var descent: CGFloat = 0

var leading: CGFloat = 0

CTLineGetTypographicBounds(line, &ascent, &descent, &leading)

还有一个需要注意的点,在CTLine中,Emoji占用两个长度单位,在String中只占用一个长度单位

见Demo