首页 文章

UIButton自定义字体垂直对齐

提问于
浏览
110

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

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

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

我也在使用自定义字体的Table Cell上遇到了同样的问题 .

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

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

Button text not vertically centered

6 回答

  • 6

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

    这里's the solution that worked for my custom font which had the same issue in UILabel, UIButton and such. The problem with the font turned out to be the fact that its ascender property was too small compared to the value of system fonts. Ascender is a vertical whitespace above font'个字符 . 要修复字体,您必须下载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字体工具套件安装程序因为SIP而无法在OSX El Capitan上运行,因为它尝试将二进制文件安装到受保护的目录中 . 您必须手动提取 ftxdumperfuser . 首先将pkg从dmg复制到本地目录,然后解压 OS X Font Tools.pkg

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

    现在导航到文件夹 fontTools.pkg with

    ~$ cd fontTools.pkg/
    

    使用提取有效负载

    ~$ cat Payload | gunzip -dc | cpio -i
    

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

    ~$ mv ftxdumperfuser /usr/local/bin/
    
  • 297

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

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

    祝好运!

  • 2

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

  • 48

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

    self.searchButton.titleLabel.baselineAdjustment = 
        UIBaselineAdjustmentAlignCenters;
    
  • 0

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

    enter image description here

    enter image description here

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

  • 5

    NOTE : There clearly is a better answer than this (the one with hundreds of up votes above)

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

    我想是一个肮脏的小黑客,但它的工作原理很好 .

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

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

相关问题