Cocoa(OS X)小字体 - 字距看起来很糟糕

时间:2012-04-03 22:17:43

标签: macos cocoa text fonts kerning

我有一个Cocoa OS X应用程序,可以创建用于打印的PDF。我有一个问题,当我使用小字体时,字距调整似乎都错了。这是一个截屏。这是我的应用程序的PDF输出的放大,使用Helvetica 6点。 Horrible Kerning Output

正如你所看到的那样,字距变得非常糟糕,有些人物在触摸,有些人则相距甚远。

我使用的代码基本上看起来像这样(这是一个为我重现问题的简化示例):

NSString* dateStr = @"Printed 04/03/2012";
NSFont* detailsFont = [NSFont fontWithName:@"Helvetica" size:6];
NSMutableAttributedString* printedDate = [[NSMutableAttributedString alloc] initWithString:dateStr];
[printedDate addAttribute:NSFontAttributeName value:detailsFont range:NSMakeRange(0, [dateStr length])];
NSRect printedDateRect = NSMakeRect(0, 0, theWidth, 10);
[printedDate drawInRect:printedDateRect];

这不是Helvetica独有的,它发生在我尝试过的所有字体中,尽管它在某些字体中比其他字体更明显。如果我使用更大的尺寸,如10,它看起来很好。来自其他应用程序(如Text Edit)的6点Helvetica看起来很好。我需要做些什么来正确渲染6点文本?

编辑添加:我刚注意到TrueType字体比使用PostScript字体要差得多。遗憾的是,我没有想要使用的许多字体的PostScript版本,因此避免使用TrueType并不是一种选择。

我正在运行OS X 10.7.3和XCode 4.2.1。

2 个答案:

答案 0 :(得分:1)

我认为printedDateRect的大小不正确。要检查此问题,请尝试使用- (void)drawAtPoint:(NSPoint)point

只是小费......

答案 1 :(得分:0)

如果您在单元格中获取此内容,则可能需要尝试更改字体大小并在单元格内返回额外的行。尝试这种方法。

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    cell.autoresizingMask = UIViewAutoresizingFlexibleHeight;
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.textLabel.font = [UIFont boldSystemFontOfSize:11];
    cell.textLabel.numberOfLines = 13;