我不是在问Helvetica和Helvetica Neue之间有什么区别。
我的问题源于这样一个事实:当我尝试使用CTFrameDraw
来渲染字体时,几乎所有字体都可以工作。然而,值得注意的是,Helvetica Neue工作,但Helvetica没有。 (同样地,Courier New也可以,但Courier没有,但由于Courier .ttf
而Courier New为.dfont
,因此可能无关。)
对于我的生活,我找不到本质的区别;它们似乎都编码相同或相似。那么,有没有人知道: Helvetica.dfont
和HelveticaNeue.dfont
之间存在哪些主要差异会让Neue被罚款,而不是Helvetica?
这是在Mac OS X 10.11.6(El Capitan)中,其中Helvetica.dfont
是版本10.0d4e1
而HelveticaNeue.dfont
是版本10.0d40e1
。
我已将问题缩小到这一点:当我致电CTFramesetterCreateWithAttributedString
时,结果框架的大多数字体都有1
行,而Helvetica和Courier的0
行。
我发现,对于Helvetica和Courier,NSAttributedString.boundingRect(with:options:context)
返回的边界矩形略短,并且通过添加9
(不知道为什么9
),边界rect变得足够高,允许CTFramesetterCreateFrame
看到文本可以被绘制(正如文档所说,“框架设置将继续填充框架,直到它用完文本或发现文本为止不再适合。“,所以给它一个足够大的框架,它将绘制所有文本。)
现在问题是:为什么NSAttributedString.boundingRect(with:options:context)
没有为这两种旧字体返回正确的边界矩形?
如果你必须看到我的渲染代码,它就在这里:https://gist.github.com/BenLeggiero/41d244f6c620d6358ced9d2811986945
这是我正在测试它的游乐场的截图:
其中previewFontImage
使用给定的字体名称作为字符串调用renderToImage
,并生成大小为50的该字体的字体,并将图像结果返回为{{1} }。