Helvetica.dfont和HelveticaNeue.dfont有什么区别?

时间:2016-08-24 14:37:36

标签: macos true-type-fonts

  

我不是在问Helvetica和Helvetica Neue之间有什么区别。

我的问题源于这样一个事实:当我尝试使用CTFrameDraw来渲染字体时,几乎所有字体都可以工作。然而,值得注意的是,Helvetica Neue工作,但Helvetica没有。 (同样地,Courier New也可以,但Courier没有,但由于Courier .ttf而Courier New为.dfont,因此可能无关。)

对于我的生活,我找不到本质的区别;它们似乎都编码相同或相似。那么,有没有人知道: Helvetica.dfontHelveticaNeue.dfont之间存在哪些主要差异会让Neue被罚款,而不是Helvetica?

这是在Mac OS X 10.11.6(El Capitan)中,其中Helvetica.dfont是版本10.0d4e1HelveticaNeue.dfont是版本10.0d40e1

更新1

我已将问题缩小到这一点:当我致电CTFramesetterCreateWithAttributedString时,结果框架的大多数字体都有1行,而Helvetica和Courier的0行。

更新2

我发现,对于Helvetica和Courier,NSAttributedString.boundingRect(with:options:context)返回的边界矩形略短,并且通过添加9(不知道为什么9),边界rect变得足够高,允许CTFramesetterCreateFrame看到文本可以被绘制(正如文档所说,“框架设置将继续填充框架,直到它用完文本或发现文本为止不再适合。“,所以给它一个足够大的框架,它将绘制所有文本。)

现在问题是:为什么NSAttributedString.boundingRect(with:options:context)没有为这两种旧字体返回正确的边界矩形?

如果你必须看到我的渲染代码,它就在这里:https://gist.github.com/BenLeggiero/41d244f6c620d6358ced9d2811986945

这是我正在测试它的游乐场的截图:

An attempt to render four fonts: Helvetica, Helvetica Neue, Courier, and Courier New. Only Helvetica Neue and Courier New rendered.

其中previewFontImage使用给定的字体名称作为字符串调用renderToImage,并生成大小为50的该字体的字体,并将图像结果返回为{{1} }。

0 个答案:

没有答案