我有一个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中使用它,只是我的应用程序中的对齐问题

我正在尝试使用从Adobe Font Collection Pro Package获得的Helvetica Neue Condensed字体.不幸的是,当我在一个内部使用它时,似乎绘制不正确UILabel.
行高似乎是正确计算的(我认为),但是当显示字体时,它会与边界框的最顶部对齐.我调用[myLabel sizeToFit]并仅调整宽度以产生此屏幕捕获:

我对字体的粗体和常规版本都有同样的问题.我能够从OSX中取出一个版本的Helvetica Neue Bold并将其放在我的设备上并显示正常(上图中的绿色背景).
字体文件或我的代码导致它以这种方式绘制可能有什么问题?
是否期望具有自定义lineSpacing属性的多行UILabel 包括该行间距,即使标签的文本适合一行?
这是我的标签:
let label = UILabel()
label.numberOfLines = 4
var paragraph = NSMutableParagraphStyle()
paragraph.lineSpacing = 5
paragraph.lineBreakMode = .ByTruncatingTail
label.attributedText = NSAttributedString(string: "Some short text", attributes: [NSParagraphStyleAttributeName: paragraph])
Run Code Online (Sandbox Code Playgroud)
这是如何布局的.请注意文本下方的额外间距.
为了比较:
奇怪的是缺乏一致性.当标签延伸到第二行时,底线不再包含此额外间距:
当有一行文本时,有没有办法删除这个行间距?或者其他一些方法来强制执行某些一致性,这样我至少可以解释它?
更新
基线计算似乎也被打破了.尝试将视图(此处为红色框)与标签的基线对齐时,会部分覆盖多行标签.
我根据UIFont sizeWithFont返回的内容设置UILabels框架,但无论出于何种原因,当我使用自定义字体时,返回的值包括一些填充,如下所示.
当我使用boldSystemFontOfSize文本在中间垂直对齐(这是我想要的),但当我使用fontWithName时,我最终在文本下填充.sizeWithFont在填充中添加的原因是什么?

继承我的代码......
CGRect frameLabel = label.frame;
CGSize sizeLabel = [label.text sizeWithFont:label.font];
frameLabel.size.width = sizeLabel.width;
frameLabel.size.height = sizeLabel.height;
[label setBackgroundColor:[UIColor redColor]];
Run Code Online (Sandbox Code Playgroud)
**编辑**
我可以使用此代码计算顶部和底部填充,并调整标签frame.origin.y以垂直居中我的标签所需的位置
float topPadding = [label.font ascender] - [label.font capHeight];
float bottomPadding = [label.font lineHeight] - [label.font ascender];
Run Code Online (Sandbox Code Playgroud)