本篇文章讲的是在实际项目中碰到一款自定义字体在展现上出现问题,而后运用先进的苹果爸爸的工具来解决这个问题的故事。html
设计师们的做品老是变幻无穷,为了成就他们,做为程序员的咱们只好知足他们喽。git
因此当设计师用到一款神奇的字体的时候,我是不会拒绝的,就像下面这个样子:程序员
为了让你们能更好的看到这个问题,我把 label 设置了一个背景色,label 的 width 和 height 都等于50。如今,在 storyboard 中看起来是没问题的,让咱们 Run 一下:github
对比 system font 字体的 label,明显感受这个 DINCondensedC 字体的内容是偏上的!(固然不用对比也能发现)。WTF!bash
惋惜的是,通过尝试,改变 contentMode 并不能对 UILabel 产生任何影响(实际绘制内容中包含下方的空白)。app
结论:不可行ide
这两种方案应该是可行的,可是,为了这个小字体,用得着这么复杂的【计算字体大小】-【经过字体大小与 label 高度计算偏移量】-【用到这个字体的 label 统一换成 XXLabel 】流程吗?工具
万一哪天设计师说:来,我们来个富文本,中间这几个字用 DINCondensedC 字体,两边的字用 system 字体,那你不是要哭了?字体
结论:不可行ui
让咱们找到可爱的设计师,请他喝个下午茶,搓顿不错的晚饭,带他作个大保健,而后和他说:兄弟这个UI图能够换个字体吗... 算了成本有点高。
结论:不可行
既然字体有点不太正常,那么咱们只能使出大招:本身动手修改这个字体。听说有一款 App:Glyphs 对于制做/修改字体来讲,很强大!而后让咱们好好下载,静静等待吧。下载完毕打开这个【PT DIN Condensed Cyrillic.ttf】字体文件,没想到这个软件还收费,只能试用几天。试用就使用吧,可是,这个字体里的每一个字符我都要一个一个去改?做为程序员,不能忍!
结论:不可行
最后仍是得靠苹果爸爸,你们的好爸爸。苹果提供了一款字体修改工具:Apple Font Tool Suite。下面就让咱们用该工具来解决这个棘手的问题。
进入这里,滚到最下方,能够看到【Apple Font Tool Suite】,点击下方的下载,下载一个适合本身 Xcode 版本,下载完成后无脑安装。
打开终端,输入:ftxdumperfuser -t hhea -A d PT\ DIN\ Condensed\ Cyrillic.ttf
,前面的【ftxdumperfuser -t hhea -A d 】为指令,后面的为你的字体文件路径。最后回车,你会看到同级文件夹下回多出一个【DINCondensedC.hhea.xml】文件:
让咱们打开这个字体文件,你会看到:
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE hheaTable [
<!ELEMENT hheaTable EMPTY>
<!ATTLIST hheaTable versionMajor CDATA #IMPLIED
versionMinor CDATA #IMPLIED
ascender CDATA #IMPLIED
descender CDATA #IMPLIED
lineGap CDATA #IMPLIED
advanceWidthMax CDATA #IMPLIED
minLeftSideBearing CDATA #IMPLIED
minRightSideBearing CDATA #IMPLIED
xMaxExtent CDATA #IMPLIED
caretSlopeRise CDATA #IMPLIED
caretSlopeRun CDATA #IMPLIED
caretOffset CDATA #IMPLIED
metricDataFormat CDATA #IMPLIED
numberOfHMetrics CDATA #IMPLIED
>
]>
<!--
Data generated Sun Aug 13 18:51:10 2017
Generated by ftxdumperfuser build 347,
FontToolbox.framework build 257
Font full name: 'PT DIN Condensed Cyrillic'
Font PostScript name: 'DINCondensedC'
-->
<hheaTable
versionMajor="1"
versionMinor="0"
ascender="700"
descender="-209"
lineGap="68"
advanceWidthMax="889"
minLeftSideBearing="-270"
minRightSideBearing="-22"
xMaxExtent="844"
caretSlopeRise="1"
caretSlopeRun="0"
caretOffset="0"
metricDataFormat="0"
numberOfHMetrics="234"
/>
复制代码
没错这是个 XML 文件,它里面包含了字体的一些公共信息:
这里面的每一项信息,均可以从苹果的:hheaTable文档 这篇文档中找到。文档中能够看到,一款字体也是一个大工程。
今天咱们要解决的,是【DINCondensedC】字体偏上的问题,所以,让咱们来调节调节 ascender 这个属性,将它从700改成900,而后保存文件。
打开终端,输入:ftxdumperfuser -t hhea -A f PT\ DIN\ Condensed\ Cyrillic.ttf
,注意这里 -A 后面的 d 已经换成了 f ,回车。
切回咱们的工程,替换原字体文件,Run 一下:
问题已解决!
欢迎品尝~