UIButton自定义字体垂直对齐

时间:2011-09-23 22:34:20

标签: ios objective-c fonts vertical-alignment

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

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

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

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

我是否需要告诉视图某处自定义字体不像其他字体那么高?

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

Button text not vertically centered

7 个答案:

答案 0 :(得分:300)

Custom installed font not displayed correctly in 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字体。

OS X El Capitan

Apple Font Tool Suite安装程序由于SIP而无法在OSX El Capitan上运行,因为它试图将二进制文件安装到受保护的目录中。 您必须手动提取ftxdumperfuser。首先将pkg从dmg复制到本地目录,然后用{/ 1>解压缩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 :(得分:48)

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

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

祝你好运!

答案 2 :(得分:6)

我认为this is the best answer. 没有玩ascender,numberOfHMetrics等...... 只需Glyphs应用程序导入导出 并完成了工作。 感谢这个答案: https://stackoverflow.com/a/16798036/1207684

答案 3 :(得分:5)

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

self.searchButton.titleLabel.baselineAdjustment = 
    UIBaselineAdjustmentAlignCenters;

答案 4 :(得分:2)

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

enter image description here enter image description here

正如你所看到的,尝试在IB中做这件事有其自身的好处。

答案 5 :(得分:2)

晚些时候参加聚会,但是由于这个问题已是第N次出现,我认为我应该发布找到的最简单的解决方案:使用Python FontTools

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

  2. 安装FontTools

    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 :(得分:0)

注意:显然有一个比这更好的答案(上面有数百票的票数)

除了编辑字体文件外,我找不到真正的答案。我不知道怎么做,也没有时间,所以我只是把我的照片缩小了,调整细胞使它看起来像是正确对齐的。

我认为这是一个肮脏的小黑客,但它有效,而且很好。

这是导致问题的唯一字体,因此问题必须与字体文件有关。

实际上并不是我的结论,这是另一个SO帖子,但我无法在任何地方找到它,如果我再次遇到它,我会把它贴在评论中。