2012-02-18 70 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. 當我添加換行符時,段落正確地放置在另一個下方,但換行符高度被添加到間距'ParagraphSpacing'間隙中。
  3. kCTParagraphStyleSpecifierParagraphSpacingBefore還影響段落範圍內的換行符。

什麼核心文本佈局引擎解釋爲段落指示符? 屬性字符串中是否每個換行符都是?

回答

2

在覈心文本中,換行符(\n)結束了一個段落。我不認爲有辦法告訴它使用不同的角色。

如果你在一行中放置兩條換行符,那麼核心文本就會像你有一個空的段落一樣工作,所以它會有額外的間距。

確保每段後面只有一個換行符。如果您的段落之間的空間仍然太多,則需要使用較小的值作爲kCTParagraphStyleSpecifierParagraphSpacingBeforekCTParagraphStyleSpecifierParagraphSpacing(或兩者)。

+0

似乎是真的。我的另外一個問題是:爲什麼kCTParagraphStyleSpecifierParagraphSpacingBefore從不爲NSAttributedString的第一段工作? – Lukasz 2012-02-24 09:09:51

+0

我不知道。 – 2012-02-24 09:13:18