2011-04-14 73 views
5

應用kCTParagraphStyleSpecifierParagraphSpacing樣式時,它對渲染文本沒有視覺效果。其他屬性,如行間距和文本對齊完美。我可能做錯了什麼?NSAttributedString kCTParagraphStyleSpecifierParagraphSpacing無效

CTTextAlignment theAlignment = kCTRightTextAlignment; 
CGFloat paragraphSpacingFloat = 150.0; 
CGFloat paragraphSpacingBeforeFloat = 150.0; 
CGFloat lineSpacing = CTFontGetLeading(baseFont)*5.0; 

CFIndex theNumberOfSettings = 4; 
CTParagraphStyleSetting theSettings[4] = { 
    { kCTParagraphStyleSpecifierParagraphSpacing, sizeof(CGFloat), &paragraphSpacingFloat }, 
    { kCTParagraphStyleSpecifierParagraphSpacingBefore, sizeof(CGFloat), &paragraphSpacingBeforeFloat }, 
    { kCTParagraphStyleSpecifierAlignment, sizeof(CTTextAlignment), &theAlignment }, 
    { kCTParagraphStyleSpecifierLineSpacing, sizeof(CGFloat), &lineSpacing } 
}; 

CTParagraphStyleRef theParagraphRef = CTParagraphStyleCreate(theSettings, theNumberOfSettings); 
[attr addAttribute:(id)kCTParagraphStyleAttributeName value:(id)theParagraphRef range:r]; 
[attr addAttribute:(id)kCTFontAttributeName value:(id)baseFont range:r]; 
CFRelease(theParagraphRef); 

我渲染使用

CTFrameSetter frameSetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attr); 
CTFrameRef frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake([[attr string] length], 0), the_drawing_cgrect, NULL); 
CTFrameDraw(frame, context); 

回答

4

你確定你的字符串有段落分隔符嗎? kCTParagraphStyleSpecifierParagraphSpacing不適用於新行。它需要實際的\ u2029。

試試這個代碼段分隔符替換所有換行符:

NSArray *paragraphs = [string componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; 
NSString *text = [items componentsJoinedByString:@"\u2029"]; 
+0

有趣!我很確定這是問題,謝謝!從那以後我就沒有觸及過這個問題,因爲我以不同的方式解決了這個問題。 – 2011-11-26 09:47:29

+0

@blago - 你是怎麼解決它的? – 2012-08-17 21:45:38