如何绘制在顶部和右下方的对象周围流动的文本?

Sim*_*mon 5 objective-c uitableview core-text ios

我有类似这个问题的问题,但更复杂.我正在尝试在表格视图单元格中绘制文本,其中右上角是日期标签,右下角是徽章,如下所示:

+-----------------------+----+
| Lorem ipsum dolor sit |DATE|
| amet, consectetur     +----+
| adipiscing elit. Integer   |
| ligula lectus, convallis   |
| non scelerisque      +-----+
| quis, tempor at nibh |BADGE|
+----------------------+-----+
Run Code Online (Sandbox Code Playgroud)

如果有更多或更少的文本,我希望单元格更大或更小:

+-----------------------+----+
| Lorem ipsum dolor sit |DATE|
| amet, consectetur     +----+
| adipiscing elit. Integer   |
| ligula lectus, convallis   |
| non scelerisque quis,      |
| tempor at nibh.  Curabitur |
| eget diam ligula.          |
| Pellentesque a elit        |
| dolor, a ullamcorper +-----+
| risus.               |BADGE|
+----------------------+-----+
Run Code Online (Sandbox Code Playgroud)

旧问题的答案链接到一个项目,该项目显示如何围绕已知形状流动文本.但我不提前知道形状,因为我需要徽章与文本的底部对齐.

这甚至可能吗?如果是这样,我该如何绘制文本,以及如何计算文本的高度?

Rob*_*ier 3

你的情况还不错,因为一切都是矩形,而且宽度似乎是固定的。有关一些起始代码,请参阅ColumnView

以下是我将如何攻击它:

  • 共有三个矩形:顶部、中间和底部。顶部和底部具有已知尺寸。只有中间可以垂直拉伸。
  • 创建一个CTFrameSetter。为顶部框创建一条路径并创建一个CTFrame布局。这部分是确定的,所以坚持下去。如果所有文本都适合,那么就完成了。
  • 为紧邻顶部框下方的中间框创建路径。让它尽可能短(我假设你需要一些空间,即使文本可以容纳在顶部和底部框中)。
  • 为紧邻中框下方的底部框创建路径。
  • 用于CTFrameSetter创建中间框架和底部框架。询问它能够布局多少文本。如果一切都完成了,那么你就完成了。这是您愿意绘制的最小盒子。
  • 如果溢出,请将中间框的大小增加一行。尝试再次布置中间和底部的框。重复直到合适。
  • 现在您知道整个视图的大小并可以布置所有内容。

那里有一些地方需要优化,但它可能比你想象的要快。