2012-02-18 4 views
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. 改行文字を追加すると、段落が正しく1つ下に配置されますが、改行行の高さが間隔「ParagraphSpacing」ギャップに追加されています。
  3. kCTParagraphStyleSpecifierParagraphSpacingBeforeは、段落範囲内の改行文字にも影響します。

段落記号として解釈するコアテキストレイアウトエンジンは何ですか? 属性付き文字列の改行文字はすべてそれですか?

答えて

2

コアテキストでは、改行文字(\n)は段落を終了します。私は別の文字を使用するように指示する方法はないと思います。

行に2つの改行を挿入すると、空の段落があるかのようにコアテキストが動作し、余分なスペースが入ります。

各段落の後に改行が1つだけあることを確認してください。あなたの段落にまだ余裕がある場合は、kCTParagraphStyleSpecifierParagraphSpacingBeforeまたはkCTParagraphStyleSpecifierParagraphSpacing(またはその両方)の値を小さくする必要があります。

+0

そうであるようです。私の付加的な質問は:なぜkCTParagraphStyleSpecifierParagraphSpacingBeforeはNSAttributedStringの最初の段落で動作しないのですか? – Lukasz

+0

私は分かりません。 –

関連する問題