【问题标题】:UIButton custom font vertical alignmentUIButton自定义字体垂直对齐
【发布时间】:2011-11-24 00:44:08
【问题描述】:

我有一个UIButton,它使用自定义字体,在我的视图加载时设置:

- (void)viewDidLoad
{
    [super viewDidLoad];    
    self.searchButton.titleLabel.font = [UIFont fontWithName: @"FONTNAME" size: 15.0 ];
}

我遇到的问题是字体似乎漂浮在中心线上。如果我注释掉这一行,默认字体会垂直居中显示。但是更改为自定义字体会破坏垂直对齐方式。

我在使用自定义字体的表格单元格上也遇到了同样的问题。

我需要在某处告诉视图自定义字体没有其他字体那么高吗?

编辑:我刚刚意识到我使用的字体是 Windows TrueType 字体。我可以在 Mac 上的 TextEdit 中很好地使用它,只是我的应用程序中的对齐有问题

【问题讨论】:

标签: ios objective-c fonts vertical-alignment


【解决方案1】:

Custom installed font not displayed correctly in UILabel 讨论了类似的问题。没有给出解决方案。

这是适用于我的自定义字体的解决方案,它在 UILabel、UIButton 等中存在相同的问题。字体的问题原来是它的 assender 属性与系统字体的值相比太小了。 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 字体。

OS X El Capitan

由于SIP,Apple Font Tool Suite 安装程序不再在 OSX El Capitan 上工作,因为它试图将二进制文件安装到受保护的目录中。 您必须手动提取ftxdumperfuser。首先将 pkg 从 dmg 复制到本地目录,然后将 OS X Font Tools.pkg 解压缩为

~$ xar -xf OS\ X\ Font\ Tools.pkg

现在导航到文件夹fontTools.pkg

~$ cd fontTools.pkg/

使用

提取有效负载
~$ cat Payload | gunzip -dc | cpio -i

现在ftxdumperfuser 二进制文件在您的当前文件夹中。您可以将其移至/usr/local/bin/,以便您可以在终端应用程序内的每个文件夹中使用它。

~$ mv ftxdumperfuser /usr/local/bin/

【讨论】:

  • +1 很棒的提示!这里有一些关于上升和下降的信息typophile.com/node/13081
  • 同样适用于 OTF 文件。
  • 如果您使用通过此解决方案修改的自定义字体,并且您设置文本,即在具有多行的 UITextView 中,行间距离会变得太大。
  • 我发现在 iOS 7 beta 6 中,他们已经修复了字体对齐问题。因此,如果您进行此修复,它在 iOS 6 中会很好,但在 iOS 7 中会损坏......虽然 7 仍处于测试阶段,所以谁知道
  • 字体工具已针对 Xcode 9 进行了更新,它们可以在 High Sierra 上正常安装。直接链接:developer.apple.com/download/more/?=font
【解决方案2】:

我解决了调整顶部内容(不是标题!)插图的问题。

例如:button.contentEdgeInsets = UIEdgeInsetsMake(10.0, 0.0, 0.0, 0.0);

祝你好运!

【讨论】:

  • 这对我来说是一个很好的快速解决方案,它似乎比尝试编辑字体更简单。 myButton.titleLabel.font = [UIFont fontWithName:@"FontName" size:20.0]; myButton.contentEdgeInsets = UIEdgeInsetsMake(3.0, 0.0, 0.0, 0.0);
  • 太棒了!谢谢!我的问题略有不同,我有使用默认字体的简单 + 和 - 按钮,它们看起来低于居中,我可以使用这里的解决方案稍微提高文本,这样它就不会消失。
【解决方案3】:

不确定这是否会有所帮助,因为它可能取决于您的字体,但可能是您的基线未对齐。

self.searchButton.titleLabel.baselineAdjustment = 
    UIBaselineAdjustmentAlignCenters;

【讨论】:

  • 在使用 minimumScaleFactor 调整字体大小时,在 UIButton 的 titleLabel 上效果很好
【解决方案4】:

我认为this is the best answer. 不要玩上升器,numberOfHMetrics 等...... 只需通过Glyphs 应用程序进行导入导出 和工作完成。 感谢这个答案: https://stackoverflow.com/a/16798036/1207684

【讨论】:

  • 你拯救了我的一天!
  • 我的也是!谢谢先生。
【解决方案5】:

聚会迟到了,但由于这个问题第 N 次袭击我,我想我会发布我找到的最简单的解决方案:使用 Python FontTools

  1. 如果您的系统上没有 Python 3,请安装它。

  2. 安装字体工具

    pip3 install fonttools

    FontTools 包含一个 TTX 工具,可以在 XML 之间进行转换。

  3. 在同一文件夹中将您的字体转换为 .ttx

    ttx myFontFile.otf

  4. 对 .ttx 进行必要的编辑并删除 .otf 文件,因为它将在下一步中替换。

  5. 将文件转换回 .otf

    ttx myFontFile.ttx


动机: solution by kolyuchi 不完整,即使使用 this extended installation flow,运行 ftxdumperfuser 也会导致 10.15.2 Catalina 出现错误。

【讨论】:

    【解决方案6】:

    您可以在 Interface Builder 中尝试一下。这是如何做到这一点的快照 -

    正如您所见,尝试在 IB 中执行此操作有其自身的好处。

    【讨论】:

    • 该设置已经到位,并且在 IB 中字体垂直显示,但显示为默认字体。只有当我运行我的应用程序时,我的自定义字体才会出现,并且它不是垂直居中的
    • 您是否在 IB 中设置了“自定义字体”? iOS 字体支持吗?
    • 字体是在 IB 中设置的,也是由我原帖中指定的代码设置的。它实际上并没有出现在 IB 屏幕模型中,尽管它出现在 IB 的字体选择下拉菜单中。
    猜你喜欢
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    相关资源
    最近更新 更多