使用时字距调整不良 - [NSString drawInRect:withAttributes:]

Ade*_*edt 5 cocoa objective-c core-text

当使用 - [NSString drawInRect:withAttributes:]时,主要是在使用内置的Helvetica Neue以及其他字体时,字距调整非常糟糕.但是,当在Text Edit(使用NSTextView)中呈现相同的字符串时,字距调整很棒.考虑这两个字符串:

坏字距

很好的字距

对于小点大小,第一种情况(在Cocoa中呈现)几乎难以辨认,而第二种情况(来自文本编辑)要好得多.我认为这里根本没有使用字距调整信息.如果我应用值为0.0的NSKernAttribute(根据文档关闭字距调整),我得到相同的结果,顶部的那个.

我也尝试过使用带有CTLineDraw的Core Text,但仍然有很糟糕的字距.所以我的问题是,在Cocoa文本系统中启用字距调整是否需要做些什么?如果没有,NSTextView如何应用字距调整?

hoo*_*oop 1

上面的例子是“更紧”,下面的例子是“更宽松”,请参阅-[NSTextView tightenKerning], -[NSTextView loosenKerning]。在这里,苹果令人困惑地将其他人所说的“跟踪”称为“字距调整”,即。在字体中指定的“字符前进”之后,在每个字形之间均匀应用恒定数量的附加空间(正或负),以使文本看起来更紧或更松。

默认的“紧密度”或“松散度”是渲染引擎的属性,而不是字体的属性,并且在不同的 OSX 版本、应用程序或 UI 元素之间很容易有所不同。

在字体中,字距调整表用于调整特定字形对所需的字符提前量,例如,在我的假设字体中:“AV”被列为字距调整对 - 当字符出现时,“A”应该具有较小的提前量接下来是一个“V”。

OSX 字体 Helvetica 和 HelveticaNeue(以及许多其他字体)根本没有字距调整信息,因此您的示例中没有使用字距调整信息是对的。

如果字体没有字距调整信息,您的问题是“如何在 Cocoa 文本系统中启用字距调整?” 没有意义或者并不意味着你认为它意味着什么(?)。