换行文本时的 CTFramesetterSuggestFrameSizeWithConstraints
我在使用 CoreText 时遇到了“先有鸡还是先有蛋”的问题。
我需要知道 NSAttributedString
当它包裹在图像周围时将占用的 CGSize
。 我有一个 UITableView,在右上角显示文本和图像。 在我的模型上,我存储 CTFrameSetterRef
,即我一次计算一次 我的模型实体加载后将 cellForRowAtIndexPath
中的 CTFrameSetterRef
传递给我的单元格。
我还使用我的frameSetter 和 CTFramesetterSuggestFrameSizeWithConstraints 预先计算单元格的高度 这很简单,我现在有一个对象数组,这些对象有一个要渲染的 AttributedString、一个用于渲染它们的框架设置器和一个高度,以便 tableView 在更新单元格之前知道这一点。
现在我想将文本环绕在右上角的图像周围。 当我想预先计算值时,这会带来一些问题。
据我所知,我需要一个 CTFrameSetter 来计算大小 (使用 CTFramesetterSuggestFrameSizeWithConstraints)。 如果我的框架是矩形,这只会给我尺寸 - 如果我想包裹文本,我需要创建一个路径并设置它的尺寸 - 但这是在我知道尺寸之前! 然后我需要将 Path 添加到字典并使用字典构建 CTFrameRef。
我的问题是,如果我的属性文本环绕在图像周围,如何预先计算单元格的高度?
I am experiencing 'chicken or the egg' problems with CoreText.
I need to know the CGSize
an NSAttributedString
will take up when it is wrapped around an image.
I have a UITableView that displays text and an image in the top right corner.
On my model I store the CTFrameSetterRef
, i.e. I calculate this once for all
my model entities when they load and then pass my cell a CTFrameSetterRef
in cellForRowAtIndexPath
.
I also pre-calculate the height of the cell by using my frameSetter and CTFramesetterSuggestFrameSizeWithConstraints
This is straight forward, I now have an array of objects that have an AttributedString to render, a frameSetter to render them with and a height so the tableView knows this before updating the cell.
Now I would like to wrap the text around the image in the top right corner.
This presents some problems when I want to pre-calculate the values.
As far as I can figure out I need a CTFrameSetter to calculate a size
(using CTFramesetterSuggestFrameSizeWithConstraints).
This only gives me the size if my frame is rectangular - If I want to wrap the text I need to create a Path and setting it's size - but this is before I know the size!
Then I need to add the Path to a dictionary and build the CTFrameRef with the dictionary.
My question is how do I pre-calculate the height for my cell, if my attributed text is wrapped around an Image?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要逐行布局:
CTFramesetterSuggestFrameSizeWithConstraints
获取行高和fitRange
。fitRange
末尾继续。You need to layout line by line:
fitRange
usingCTFramesetterSuggestFrameSizeWithConstraints
.fitRange
.