对于CTFrame的第一行,不遵守kCTParagraphStyleSpecifierParagraphSpacing

时间:2012-05-04 01:43:19

标签: ios core-text

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

我们发现,如果段落使用非零kCTParagraphStyleSpecifierParagraphSpacing作为其CTParagraphStyleSettings属性之一,则如果该段落是CTFrame中的第一个项目,则忽略此段落间距,即使文本中前面有另一个段落送到镶框机。

我认为如果您正在绘制要打印的PDF,这种行为是有意义的,但考虑到我们试图将文本呈现为单个,可滚动且连续的文本块,它给我们带来了问题。有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:6)

如果您无法使用CTParagraphStyleSetting更改行为,我认为这是一个错误,或Apple认为行为有意义。无论如何,为了获得您想要的结果,我认为最好的方法是使用CTTypesetter并自己处理 lineSpacing paragraphSpacing 。我认为CTFrame实现非常错误,因为我不久前遇到another

要滚动您自己的解决方案,您需要CTTypesetterSuggestClusterBreakCTTypesetterSuggestLineBreak来计算每行的字数。行高可以是字体大小,并在绘制每一行时添加lineSpacing。当遇到换行符(\ n)时,在绘制下一行之前添加paragraphSpacing。

使用CTTypesetter,事情更容易控制,当然,它还会增加一些困难,因为你必须处理换行符和缩进。但这是我能想到的唯一方法,以获得更理想的结果。

祝你好运。