UIButton自定义字体垂直对齐
Posted
技术标签:
【中文标题】UIButton自定义字体垂直对齐【英文标题】:UIButton custom font vertical alignment 【发布时间】: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 中很好地使用它,只是我的应用程序中的对齐有问题
【问题讨论】:
我对这种字体(.otf,不是 .ttf)也有同样的问题:fontsquirrel.com/fonts/bebas-neue 【参考方案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://***.com/a/16798036/1207684
【讨论】:
你拯救了我的一天! 我的也是!谢谢先生。【参考方案5】:聚会迟到了,但由于这个问题第 N 次袭击我,我想我会发布我找到的最简单的解决方案:使用 Python FontTools。
如果您的系统上没有 Python 3,请安装它。
安装字体工具
pip3 install fonttools
FontTools 包含一个 TTX 工具,可以在 XML 之间进行转换。
在同一文件夹中将您的字体转换为 .ttx
ttx myFontFile.otf
对 .ttx 进行必要的编辑并删除 .otf 文件,因为它将在下一步中替换。
将文件转换回 .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 的字体选择下拉菜单中。以上是关于UIButton自定义字体垂直对齐的主要内容,如果未能解决你的问题,请参考以下文章
调用 sizeToFit 时,UIButton 无法使用自定义字体正确调整高度
使用自动布局在屏幕更改时调整自定义单元格中的 UIButton 字体