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);
テキストプロパティが期待どおりに適用されています。 しかし、段落の配置を持ついくつかの問題があります。
- 段落がお互いの後の場所であることが、属性の範囲の先頭に改行\ n個の文字がない限り、「インライン」を流れていませんが。
- 改行文字を追加すると、段落が正しく1つ下に配置されますが、改行行の高さが間隔「ParagraphSpacing」ギャップに追加されています。
- kCTParagraphStyleSpecifierParagraphSpacingBeforeは、段落範囲内の改行文字にも影響します。
段落記号として解釈するコアテキストレイアウトエンジンは何ですか? 属性付き文字列の改行文字はすべてそれですか?
そうであるようです。私の付加的な質問は:なぜkCTParagraphStyleSpecifierParagraphSpacingBeforeはNSAttributedStringの最初の段落で動作しないのですか? – Lukasz
私は分かりません。 –