关于ios:CTFramesetterSuggestFrameSizeWithConstraints时换行

CTFramesetterSuggestFrameSizeWithConstraints when wrapping text

我遇到了 CoreText 的"鸡或蛋"问题。

我需要知道 CGSizeNSAttributedString 在环绕图像时会占用。
我有一个 UITableView,它在右上角显示文本和图像。
在我的模型上,我存储 CTFrameSetterRef,即我只计算一次
我的模型实体加载时,然后在 cellForRowAtIndexPath.

中将我的单元格传递给 CTFrameSetterRef

我还使用我的 frameSetter 和 CTFramesetterSuggestFrameSizeWithConstraints 预先计算了单元格的高度
这很简单,我现在有一个对象数组,这些对象有一个要渲染的 AttributedString、一个用来渲染它们的 frameSetter 和一个高度,因此 tableView 在更新单元格之前知道这一点。

现在我想在右上角的图像周围环绕文字。
当我想预先计算这些值时,这会带来一些问题。

据我所知,我需要一个 CTFrameSetter 来计算尺寸
(使用 CTFramesetterSuggestFrameSizeWithConstraints)。
如果我的框架是矩形的,这只会给我大小 - 如果我想package文本,我需要创建一个路径并设置它的大小 - 但这是在我知道大小之前!
然后我需要将路径添加到字典并使用字典构建 CTFrameRef。

我的问题是如何预先计算单元格的高度,如果我的属性文本包裹在图像周围?


你需要逐行布局:

  • 使用宽度限制布局第一行并使用 CTFramesetterSuggestFrameSizeWithConstraints 获取行高和 fitRange
  • 将第二行布局在第一行下方,根据前一行的高度和所需的间距设置适当的宽度限制 a€" 您可以计算当前行的 origin.y 用于确定该行是否会运行针对图像,在最后一个 fitRange 的末尾继续。
  • 继续€|