我在为 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);
文本属性正在按预期应用。但是段落对齐几乎没有问题:
- 除非在属性范围的开头有换行符 \n ,否则段落不是一个接一个的位置,而是“内联”流动。
- 当我添加换行符时,段落被正确放置在另一个之下,但换行符行高被添加到间距“ParagraphSpacing”间隙中。
- kCTParagraphStyleSpecifierParagraphSpacingBefore 也会影响段落范围内的换行符。
什么 Core Text 布局引擎解释为段落指示器?是属性字符串中的每个换行符吗?