jas*_*ori 8 objective-c core-text ios
我正在使用TTTAttributedLabel(使用CoreText)而不是UILabel来加粗某些部分.它工作得很好,但文字看起来不一样.它看起来像是使用不同的字体.我把它设置为相同的字体(Helvetica),但一个是CTFont,一个是UIFont.为什么他们看起来不一样?
UIFontUILabel的:[UIFont systemFontOfSize:15]CTFont针对CoreText的:CTFontCreateWithName((__bridge CFStringRef)[UIFont systemFontOfSize:15].fontName, 15, NULL)UILabel截图:

CoreText屏幕截图:

"散步"中的"p"和"o"是最容易看到字体看起来不一样的部分.CoreText版本中的字母更圆.
UILabel使用WebKit样式的文本呈现,它在准确性方面采用快捷方式来提高绘图性能.CoreText(最初来自OS X)采用相反的方式,以牺牲性能为代价,尽可能精确地呈现.
对于iOS应用程序,仅为最明显的关键UI(例如标题)保留CoreText,并且可以在其中缓存渲染的输出.
我花了一些时间试图解决这个问题,我想我已经得到了它.从我到目前为止测试的结果来看,通过将字距设置为零,您的CoreText渲染看起来与您在UILabel,UITextView等上看到的渲染相同:
NSNumber *kern = [NSNumber numberWithFloat:0];
NSRange full = NSMakeRange(0, [attributedText string].length);
[attributedText addAttribute:(id)kCTKernAttributeName value:kern range:full];
Run Code Online (Sandbox Code Playgroud)
这真是一种奇怪的行为,我不能说我知道它为什么会发生,但这正是Apple似乎在做的事情.(它实际上增加了某些地方的间距,比如在'Te'之间.)
在iOS 5.1上测试过.
| 归档时间: |
|
| 查看次数: |
2715 次 |
| 最近记录: |