看起来在iOS 5.1和iOS 6之间的CoreText实现中存在一些差异,您可以从以下两个屏幕截图中看到:
iOS 6:
iOS 5:
首先,文本颜色没有正确应用。似乎在iOS 5.1上,kCTForegroundColorAttributeName
需要使用CGColor
,而在iOS 6上,传递一个UIColor就足够了。所以我通过更改我的代码来解决了这个问题:
[attributes setObject:(id)[color CGColor]
forKey:(NSString*)kCTForegroundColorAttributeName];
其次,段落间距有点问题。在“sight”和“According”之间的距离为11px,而不是25px(在截图中测量)。在这两种情况下,段落间距都设置为5:
NSMutableData *styleSettingsArray = [NSMutableData data];
CGFloat spaceBefore,spaceAfter;
...
CTParagraphStyleSetting styleSettingB = {kCTParagraphStyleSpecifierParagraphSpacingBefore ,sizeof(CGFloat),&spaceBefore};
CTParagraphStyleSetting styleSettingA = {kCTParagraphStyleSpecifierParagraphSpacing ,sizeof(CGFloat),&spaceAfter};
[styleSettingsArray appendBytes:&styleSettingB length:sizeof(styleSettingB)];
[styleSettingsArray appendBytes:&styleSettingA length:sizeof(styleSettingA)];
...
if(styleSettingsArray.length > 0)
{
CTParagraphStyleRef paragraphStyleRef = CTParagraphStyleCreate([styleSettingsArray bytes], [styleSettingsArray length] / sizeof(CTParagraphStyleSetting));
[dictionary setObject:(__bridge id)(paragraphStyleRef) forKey:(NSString*)kCTParagraphStyleAttributeName];
CFRelease(paragraphStyleRef);
}
控制台中paragraphStyleRef
的描述:
iOS 6:
CTParagraphStyle:
base writing direction = -1, alignment = 3, line break mode = 0, default tab interval = 0
first line head indent = 0, head indent = 0, tail indent = 0
line height multiple = 0, maximum line height = 0, minimum line height = 0
line spacing adjustment = 0, paragraph spacing = 5, paragraph spacing before = 5
iOS 5:
CTParagraphStyle:
writing direction = -1, alignment = 3, line break mode = 0, default tab interval = 0
first line head indent = 0, head indent = 0, tail indent = 0
line height multiple = 0, maximum line height = 0, minimum line height = 0
line spacing adjustment = 0, paragraph spacing = 5, paragraph spacing before = 5
这两段文字在我看来是一样的,所以我不知道问题出在哪里。除了段落间距之外,它们是完全相同的。
那么我该如何修复呢?还有其他什么可能导致文本显示不同的问题需要我注意吗?
编辑:经过一些调查,发现段落样式的差异实际上是由于我的换行符引起的,即 "\r\n"。将其更改为"\n"解决了间距问题。