3

我们有一个应用程序,它严重依赖 kCTParagraphStyleSpecifierParagraphSpacing 来管理段落之间的间距,它可以在整个文本中变化。为了提高编辑性能,我们将主核心文本视图实现为 CTFrames 的集合,这些 CTFrames 在适当的时候被绘制/重绘。

我们发现,如果一个段落使用非零 kCTParagraphStyleSpecifierParagraphSpacing 作为其 CTParagraphStyleSettings 属性之一,如果该段落是 CTFrame 中的第一项,则该段落间距将被忽略,即使在提供给框架设定器。

我想如果您正在绘制一个打算打印的 PDF,这种行为是有意义的,但是鉴于我们试图将我们的文本呈现为一个单一的、可滚动的和连续的文本块,这给我们带来了问题。有没有办法解决这个问题?

4

1 回答 1

6

如果你不能用 a 改变行为CTParagraphStyleSetting,我认为这是一个错误,或者 Apple 认为这种行为是有意义的。无论如何,要获得您想要的结果,我认为最好的方法是自己使用CTTypesetter和处理lineSpacingparagraphSpacing。我认为这个实现有很多错误,因为我不久前CTFrame遇到了另一个。

为了滚动您自己的解决方案,您将需要CTTypesetterSuggestClusterBreakCTTypesetterSuggestLineBreak计算每行的字符数。行高可以是字体大小,在绘制每条线时添加 lineSpacing。当您遇到换行符(\n)时,请在绘制下一行之前添加段落间距。

有了CTTypesetter,事情就更可控了,当然也增加了一些困难,因为你要处理换行和缩进。但这是我能想到的获得更理想结果的唯一方法。

祝你好运。

于 2012-05-27T02:02:15.067 回答