自定义安装的字体在UILabel中显示不正确

我正尝试使用Adobe Font Collection Pro软件包中的Helvetica Neue Condensed字体。 不幸的是,当我在UILabel使用它时,它似乎画错了。

行高似乎是正确计算的(我认为),但是当显示字体时,它会与边界框的顶部对齐。 我调用了[myLabel sizeToFit] ,只调整了宽度以产生此屏幕截图:

不正确字体呈现的屏幕截图

我对粗体和普通版的字体都有同样的问题。 我能够从OSX中拉出一个Helvetica Neue Bold版本,并将其放到我的设备上,并且显示正常(上图中的绿色背景)。

字体文件或我的代码可能导致它以这种方式绘制的错误是什么?


我发布了一个涉及修补ttf字体文件的解决方案:

在自定义安装的字体在UILabel中显示不正确时讨论了类似的问题。 没有给出解决方案。

这里的解决方案适用于我的自定义字体,它在UILabel,UIButton等中有相同的问题。 字体的问题原来是它的上行属性与系统字体的值相比太小了。 Ascender是字体字符上方的垂直空格。 要修复您的字体,您必须下载Apple Font Tool Suite命令行工具。 然后采取您的字体,并执行以下操作:

~$ ftxdumperfuser -t hhea -A d Bold.ttf

这将创建Bold.hhea.xml 。 用文本编辑器打开它并增加ascender属性的值。 你将不得不做一点试验以找出最适合你的确切值。 在我的情况下,我将其从750更改为1200.然后使用以下命令行再次运行该实用程序,将您的更改合并回ttf文件中:

~$ ftxdumperfuser -t hhea -A f Bold.ttf

然后,只需在您的应用程序中使用生成的ttf字体。


所以这是kolyuchiy的答案的修改版本。

我用字形打开了字体,然后在不修改任何内容的情况下导出它。 不知何故,神奇的是,垂直对齐问题已经消失了!

更好的是,新的字体可以很好地和像sizeWithFont:这样的方法配合使用,所以它没有Joshua提到的问题。

我用提到的命令kolyuchiy来看看HHEA表,并注意到Glyphs不仅修改了ascender ,还lineGapnumberOfHMetrics

以下是原始数据:

versionMajor="1"
versionMinor="0"
ascender="780"
descender="-220"
lineGap="200"
advanceWidthMax="1371"
minLeftSideBearing="-73"
minRightSideBearing="-52"
xMaxExtent="1343"
caretSlopeRise="1"
caretSlopeRun="0"
caretOffset="0"
metricDataFormat="0"
numberOfHMetrics="751"

之后:

versionMajor="1"
versionMinor="0"
ascender="980"
descender="-220"
lineGap="0"
advanceWidthMax="1371"
minLeftSideBearing="-73"
minRightSideBearing="-52"
xMaxExtent="1343"
caretSlopeRise="1"
caretSlopeRun="0"
caretOffset="0"
metricDataFormat="0"
numberOfHMetrics="748"

因此,故事的道德 - 不只是增加上升,但也修改其他相关的价值。

我不是印刷术专家,所以我不能真正解释为什么和如何。 如果任何人都可以提供更好的解释,将不胜感激! :)


iOS 6尊重字体的lineGap属性,而iOS 7忽略它。 因此,只有行间距为0的自定义字体才能在两个操作系统上正常工作。

解决方法是使lineGap 0并使上行相应地变大。 根据上面的答案,一种解决方案是从字形导入和导出。 但是,请注意,该应用程序的未来版本可能会修复此“错误”。

一个更强大的解决方案是根据这篇文章自己编辑字体。 特别,

  • 安装OS X字体工具。
  • 将字体指标转储到文件中: ftxdumperfuser -t hhea -A d YOUR_FONT.ttf
  • 在编辑器中打开转储的文件。
  • 通过添加lineGap属性的值来编辑ascender属性。 例如,如果lineGap是200并且ascender是750,则使ascender 950。
  • lineGap设置为0。
  • 将更改合并到字体中: ftxdumperfuser -t hhea -A f YOUR_FONT.ttf
  • 一旦你这样做,你可能需要相应地调整你的UI。

    链接地址: http://www.djcxy.com/p/59803.html

    上一篇: Custom installed font not displayed correctly in UILabel

    下一篇: Apply scale to layout in android