【问题标题】:Cocoa (OS X) small font - kerning looks awfulCocoa (OS X) 小字体 - 字距看起来很糟糕
【发布时间】:2012-04-17 15:18:23
【问题描述】:

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

如您所见,字距调整很糟糕,一些字符相互接触,而另一些则相距太远。

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

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。

【问题讨论】:

  • 伙计,这很严重keming
  • 我在我的电脑上测试了你的代码。我无法得到那么糟糕的东西,但我确实注意到它受到我用于theWidth 的值的影响,所以你可能想尝试改变它。此外,对于像这样的简单绘图,您可能希望使用NSString's drawInRect:withAttributes: 来简化您的代码。
  • 谢谢。使 theWidth 太小肯定会导致问题,但在我的代码中,它设置为纸张的全宽。我可以将它设置为一个巨大的数字,它仍然表现出同样的问题。
  • 这个版本的 Helvetica 是 Mac OS X 提供的版本,还是来自其他来源的版本?
  • 这是 OS X 提供的版本。 /System/Library/Fonts/Helvetica.dfont。 “© 1990-2006 Apple Computer Inc. © 1981 Linotype AG © 1990-91 Type Solutions Inc.”。然而,它不仅仅是 Helvetica,它似乎是任何 Postscript 字体。

标签: macos cocoa text fonts kerning


【解决方案1】:

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

    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;

【讨论】:

    【解决方案2】:

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

    只是一个提示...

    【讨论】:

      猜你喜欢
      • 2013-08-24
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多