2012-02-05 87 views
1

我遇到了CoreText的“鸡或鸡蛋”问题。CTFramesetterSuggestFrameSizeWithConstraints包装文本时

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

我也预先计算用我的frameSetter和CTFramesetterSuggestFrameSizeWithConstraints 这是直线前进的单元格的高度,我现在已经有构造一个AttributedString渲染对象的数组,一个frameSetter与使其和高度,以便tableView在更新单元之前就知道这一点。

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

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

我的问题是我如何预先计算我的细胞的高度,如果我的属性文本是围绕图像?

回答

0

您需要布局一行一行:

  1. 布局与宽度限​​制的第一行和使用CTFramesetterSuggestFrameSizeWithConstraints得到线高度和fitRange
  2. 布局第一行下面的第二行,并具有适当的宽度限制 - 从前面行的高度和希望的间距开始,可以计算当前行的origin.y,用于确定此行是否将对照图像跑,继续在最后fitRange结束。
  3. 继续...