Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSAttributedString kCTParagraphStyleSpecifierParagraphSpacing has no effect

When applying the kCTParagraphStyleSpecifierParagraphSpacing style, it has no visual effect to the rendered text. The other attributes, such as line spacing and text alignment work perfectly. What could I be doing wrong?

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);

I render the text using

CTFrameSetter frameSetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attr);
CTFrameRef frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake([[attr string] length], 0), the_drawing_cgrect, NULL);
CTFrameDraw(frame, context);
like image 920
Kevin Branigan Avatar asked Apr 14 '11 20:04

Kevin Branigan


1 Answers

Are you sure your string has paragraph separators? kCTParagraphStyleSpecifierParagraphSpacing doesn't work on new lines. It requires actual \u2029.

Try this code to replace all newlines with paragraph separators:

NSArray *paragraphs = [string componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
NSString *text = [items componentsJoinedByString:@"\u2029"];
like image 127
Blago Avatar answered Nov 11 '22 14:11

Blago