自定义UIFont基线已移位

Cyr*_*lle 42 truetype opentype uifont ios

我遇到了自定义UIFonts的问题.我加载其中的6个(常规/粗体/ regularItalic/boldItalic中的字体A,浓缩/浓缩变量中的字体B).

但是,这是渲染时的内容: 在此输入图像描述

前两行是正常的,但最后一行表现出基线问题.

我已经尝试在FontLab中更改字体的UPM,上升器,下行器,x高度,以便它匹配第一个字体的值(正确呈现),但无济于事.我已经尝试将字体格式从OTF转换为TTF,没有运气.无论我尝试什么,它总是以这种方式呈现.

有任何人对此有经验吗?

art*_*vin 36

在这里,甚至在这里,您可以找到适合您的解决方案.一切都与基线有关.

注意 在El Capitan上安装Apple Fonts Utility时出现问题.有关解决方法,请参阅https://apple.stackexchange.com/questions/211138/apple-font-tools-cannot-install-in-macbook-pro-el-capitan.

要在字体中编辑这些,您需要下载Apple字体工具套件.安装完成后,需要打开终端并导航到包含字体的目录.之后输入以下命令:

  1. ftxdumperfuser -t hhea -A d font.ttf这将创建一个名为font.hhea.xml的文件,将这个新文件打开到文本编辑器中并调整ascender和descender的值.通常,如果你的字体太低,你想减少上升并增加下降.编辑并保存后,在终端中输入以下命令以重建您的Font文件:

  2. ftxdumperfuser -t hhea -A f font.ttf您现在可以在应用程序中使用font.ttf文件.如果字体仍然不正确,只需重复上述步骤,直到您满意为止.

或者您可以轻松更改NSBaselineAttributeName,如下所示:

NSAttributedString *attrStr = [[NSAttributedString alloc] initWithString:@"a string"
                              attributes:@{ NSBaselineOffsetAttributeName : @-13 }];
Run Code Online (Sandbox Code Playgroud)


Nec*_*ech 5

我发现的另一个有趣的解决方案来自以下帖子:\n http://www.andyyardley.com/2012/04/24/custom-ios-fonts-and-how-to-fix-the-vertical-position-problem /

\n\n

因此,您应该检查您的字体是否属于这种情况,正如他在评论之一中所说:

\n\n

我的解决方案实际上修复了自定义字体以与 iOS\xe2\x80\x99s 渲染引擎一起使用,允许您将其用作标准字体的直接替换,无需任何修改。

\n\n

他是如何做到的?

\n\n

基本上,他建议使用外部Apple工具编辑字体的规格(请参阅字体规格参考https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/CustomTextProcessing/CustomTextProcessing.html#// apple_ref/doc/uid/TP40009542-CH4-SW66 )

\n\n

要在字体中编辑这些内容,您需要下载 Apple Font Tool Suite。一旦你\xe2\x80\x99安装了这个,你需要打开终端并导航到包含你的字体的目录。之后输入以下命令:

\n\n
ftxdumperfuser -t hhea -A d font.ttf\n
Run Code Online (Sandbox Code Playgroud)\n\n

这将创建一个名为 font.hhea.xml 的文件,在文本编辑器中打开这个新文件并调整上升部分和下降部分的值。一般来说,如果你的字体太低,你需要减少上升部分并增加下降部分。编辑并保存后,在终端中输入以下命令以重建字体文件:

\n\n
ftxdumperfuser -t hhea -A f font.ttf\n
Run Code Online (Sandbox Code Playgroud)\n\n

您现在可以在应用程序中使用 font.ttf 文件。如果字体仍然不正确,请重复上述过程,直到您满意为止。

\n