0

我在为 NSAttributedString 中的段落应用适当的顶部和底部间距时遇到了一个小问题。我正在使用此代码来设置段落属性:

int sf = sizeof(CGFloat);
        CTParagraphStyleSetting settings[ParagraphStylesSupported] = 
            {
                { kCTParagraphStyleSpecifierAlignment, sizeof(QuartzTextAlignment), &style.textAlignment },
                { kCTParagraphStyleSpecifierParagraphSpacingBefore, sf, &marginTop},
                { kCTParagraphStyleSpecifierParagraphSpacing, sf, &marginBot},
                { kCTParagraphStyleSpecifierMinimumLineHeight, sf, &lineHeight},

                { kCTParagraphStyleSpecifierLineSpacing, sf, &lineSpacing},
                { kCTParagraphStyleSpecifierFirstLineHeadIndent, sf, &style.firstLineIndent},

            };

            CTParagraphStyleRef paragraphStyle = CTParagraphStyleCreate(settings, ParagraphStylesSupported);


            [string addAttribute:(NSString*)kCTParagraphStyleAttributeName value:(id)paragraphStyle range:item.range];
            CFRelease(paragraphStyle);

文本属性正在按预期应用。但是段落对齐几乎没有问题:

  1. 除非在属性范围的开头有换行符 \n ,否则段落不是一个接一个的位置,而是“内联”流动。
  2. 当我添加换行符时,段落被正确放置在另一个之下,但换行符行高被添加到间距“ParagraphSpacing”间隙中。
  3. kCTParagraphStyleSpecifierParagraphSpacingBefore 也会影响段落范围内的换行符。

什么 Core Text 布局引擎解释为段落指示器?是属性字符串中的每个换行符吗?

4

1 回答 1

2

在 Core Text 中,换行符 ( \n) 结束一个段落。我认为没有办法告诉它使用不同的字符。

如果你在一行中放置两个换行符,那么 Core Text 将表现得好像你有一个空段落,所以它会增加额外的间距。

确保每个段落后只有一个换行符。如果您的段落之间仍然有太多空间,则需要为kCTParagraphStyleSpecifierParagraphSpacingBeforeor kCTParagraphStyleSpecifierParagraphSpacing(或两者)使用较小的值。

于 2012-02-21T03:17:05.043 回答