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

Jam*_*s J 3 core-text ios

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

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

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

nee*_*vek 6

如果你不能用a改变行为CTParagraphStyleSetting,我认为这是一个bug,或Apple认为这种行为是有道理的.无论如何,为了得到你想要的结果,我认为最好的方法是自己使用CTTypesetter和处理lineSpacingparagraphSpacing.我认为CTFrame实施是非常错误的,因为我不久前遇到了另一个.

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

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

祝好运.