不使用换行符定义核心文本段落?

时间:2012-02-18 18:12:19

标签: ios iphone core-text paragraph

我在为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还会影响段落范围内的换行符。
  4. Core Text布局引擎将哪个解释为段落指示符? 它是属性字符串中的每个换行符吗?

1 个答案:

答案 0 :(得分:2)

在核心文本中,换行符(\n)结束一个段落。我不认为有办法告诉它使用不同的角色。

如果你连续添加两个换行符,那么核心文本就像你有一个空段落一样,所以它会增加额外的间距。

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