UIButton自定义字体垂直对齐

Pet*_*ete 114 fonts objective-c vertical-alignment ios

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

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

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

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

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

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

按钮文本不是垂直居中

kol*_*hiy 305

在UILabel中未正确显示的Custom安装字体中讨论了类似的问题.没有给出解决方案.

这是适用于我的自定义字体的解决方案,在UILabel,UIButton等中存在相同的问题.事实上,字体的问题是它的上升属性与系统字体的值相比太小了.Ascender是字体字符上方的垂直空格.要修复字体,您必须下载Apple Font Tool Suite命令行实用程序.然后取你的字体并执行以下操作:

~$ ftxdumperfuser -t hhea -A d Bold.ttf
Run Code Online (Sandbox Code Playgroud)

这将创造Bold.hhea.xml.使用文本编辑器打开它并增加ascender属性值.您将需要进行一些实验,以找出最适合您的确切值.在我的情况下,我将其从750更改为1200.然后使用以下命令行再次运行该实用程序,将您的更改合并回ttf文件:

~$ ftxdumperfuser -t hhea -A f Bold.ttf
Run Code Online (Sandbox Code Playgroud)

然后在您的应用中使用生成的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
Run Code Online (Sandbox Code Playgroud)

现在导航到文件夹fontTools.pkg

~$ cd fontTools.pkg/
Run Code Online (Sandbox Code Playgroud)

使用提取有效负载

~$ cat Payload | gunzip -dc | cpio -i
Run Code Online (Sandbox Code Playgroud)

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

~$ mv ftxdumperfuser /usr/local/bin/
Run Code Online (Sandbox Code Playgroud)

  • 同样适用于OTF文件. (34认同)
  • 我发现在iOS 7 beta 6中,他们已经修复了字体对齐问题.因此,如果你做这个修复,它将在iOS 6中很好,但在iOS 7中被破坏....但是7仍处于测试阶段,所以谁知道 (5认同)
  • +1很棒的小费!这里有一些关于Ascenders和Descenders的信息http://typophile.com/node/13081 (4认同)
  • 已经为Xcode 9更新了字体工具,它们在High Sierra上安装得很好.直接链接:https://developer.apple.com/download/more/?= (3认同)
  • 如果您使用使用此解决方案修改的自定义字体,并且您在具有多行的UITextView中设置文本,则行间距离变得太大. (2认同)
  • 我尝试在OS X El Capitan上安装Apple Font Suite,但由于它与当前的OS X版本不兼容,因此无法安装.有人找到了让它在El Capitan上运行的方法吗? (2认同)
  • Apple字体工具无法安装在Macbook Pro El Capitan中.有关变通方法,请参见http://apple.stackexchange.com/questions/211138/apple-font-tools-cannot-install-in-macbook-pro-el-capitan. (2认同)

Jor*_*nas 48

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

例如: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); (15认同)

dol*_*048 6

我认为这是最好的答案. 没有玩ascender,numberOfHMetrics等......只需通过Glyphs应用程序导入导出和完成工作.感谢这个答案:https: //stackoverflow.com/a/16798036/1207684


Mat*_*ats 5

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

self.searchButton.titleLabel.baselineAdjustment = 
    UIBaselineAdjustmentAlignCenters;
Run Code Online (Sandbox Code Playgroud)

  • 当使用minimumScaleFactor调整字体大小时,在UIButton的titleLabel上工作得很好 (3认同)