段落证明了CoreText

时间:2011-11-04 15:32:35

标签: iphone ios core-text

我有以下代码用CoreText格式化一段文本。

(...)

CTFontRef fontRef = CTFontCreateWithName((CFStringRef)fontName,
                                         [self.fontSize floatValue], NULL);

CTTextAlignment alignment = kCTJustifiedTextAlignment;

CTParagraphStyleSetting settings[]={
    {kCTParagraphStyleSpecifierAlignment, sizeof(alignment), &alignment},
};

CTParagraphStyleRef paragraphStyle = CTParagraphStyleCreate(settings, 
                                           sizeof(settings)/sizeof(settings[0]));

self.attrs = [NSDictionary dictionaryWithObjectsAndKeys:
         //The following line doesn't work!
         (id)paragraphStyle, kCTParagraphStyleAttributeName,
         (id)self.color.CGColor, kCTForegroundColorAttributeName,
         (id)fontRef, kCTFontAttributeName,
         nil];

CFRelease(fontRef);
CFRelease(paragraphStyle);

NSMutableAttributedString* aString = [[[NSMutableAttributedString alloc] initWithString:@""] autorelease];

(...)

[aString appendAttributedString:[[[NSAttributedString alloc] initWithString:text attributes:attrs] autorelease]];

如果删除以下属性对(值/键),一切正常(颜色,字体等)。

(id)paragraphStyle, (NSString*)kCTParagraphStyleAttributeName,

如果我将此属性放在attrs字典上,当我使用CTFrameGetVisibleStringRange时,程序会进入无限循环。

我做错了什么?


更新:在Mattias回答之后我发现代码不是问题。在文本中间丢失了一些HTML标签(垃圾),由于某种原因,FrameSetter丢失并返回并且空范围。当文本上没有HTML标签时,一切都很顺利。

1 个答案:

答案 0 :(得分:3)

我怀疑CTParagraphStyleCreate因某种原因返回NULL导致dictionaryWithObjectsAndKeys:创建一个空字典。但我看不到你的段落样式设置有任何错误。

查看我使用段落样式设置的CoreTextLabel.m类来源。