包装文本时的CTFramesetterSuggestFrameSizeWithConstraints

时间:2012-02-05 14:44:51

标签: ios core-text

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

我需要知道CGSizeNSAttributedString在图像被包裹时会占用。 我有一个UITableView,在右上角显示文本和图像。 在我的模型中,我存储CTFrameSetterRef,即我为所有人计算一次 加载我的模型实体,然后在CTFrameSetterRef中将cellForRowAtIndexPath传递给我的单元格。

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

现在我想将图片包裹在右上角的图片周围。 当我想预先计算值时,这会出现一些问题。

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

我的问题是,如果我的归因文字包裹在图片周围,我该如何预先计算单元格的高度?

1 个答案:

答案 0 :(得分:1)

您需要逐行布局:

  1. 使用宽度限制布局第一行并使用fitRange获取行高CTFramesetterSuggestFrameSizeWithConstraints
  2. 在第一行下方布置第二行,并使用适当的宽度限制 - 从前面行的高度和您想要的间距可以计算当前行的origin.y,用于确定此行是否为针对图片运行,在最后fitRange结束时继续。
  3. 继续......