ios - UIButton自定义字体垂直对齐

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

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

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

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

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

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

最佳答案

在 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 字体工具套件安装程序不再在 OSX El Capitan 上工作。因为它试图将二进制文件安装到 protected 目录中。 您必须手动提取 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/

https://stackoverflow.com/questions/7535498/

相关文章:

ios - 如何使用 Swift 播放本地视频?

ios - 在 iOS 的 UITextView 中检测属性文本的点击

objective-c - 在 switch 语句中声明变量

ios - UIRefreshControl - 当 UITableViewController 在

objective-c - 有没有办法抑制 Xcode 中的警告?

objective-c - NSObject +load 和 +initialize - 他们做什么

objective-c - 如何使用 Objective-C 解析 JSON?

iphone - 导航栏出现在带有新 iOS7 SDK 的 View 上

iphone - ARC 还是不 ARC?有什么优点和缺点?

ios - 如何从 NSDate 获取小时和分钟?