我根据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]];

** 编辑 **

我可以使用此代码计算顶部和底部填充,并调整标签 frame.origin.y 以将标签垂直居中放置
float topPadding = [label.font ascender] - [label.font capHeight];
float bottomPadding = [label.font lineHeight] - [label.font ascender];

最佳答案

字体是造成这种填充的唯一可能原因,但是如果您只需要单行标签,则不要浪费时间编辑字体,只需通过以下方法在设置适当的帧后将标签的高度减少几像素即可:

label.frame = CGRectInset(label.frame, 0, bottomPadding);

另外,代替:
CGRect frameLabel = label.frame;
CGSize sizeLabel = [label.text sizeWithFont:label.font];
frameLabel.size.width = sizeLabel.width;
frameLabel.size.height = sizeLabel.height;

您可以致电:
[label sizeToFit];

10-08 09:10