У меня есть тривиальная проблема с применением правильного верхнего и нижнего промежутка для абзацев в 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 влияет также на символ новой строки внутри абзацаrange.
Какой механизм разметки Core Text интерпретирует как индикатор абзаца?Это все символы новой строки в указанной строке?