调用 sizeToFit 时,UIButton 无法使用自定义字体正确调整高度

Posted

技术标签:

【中文标题】调用 sizeToFit 时,UIButton 无法使用自定义字体正确调整高度【英文标题】:UIButton does not resize height correctly with custom font when sizeToFit is called 【发布时间】:2014-01-07 18:03:28 【问题描述】:

我正在尝试使用自定义字体创建UIButton。我设置了titleLabel's 字体,然后设置了我的文本,然后调用sizeToFit。不幸的是,它将高度调整为太小了几个像素,并刮掉了每个大写字母的一部分。按钮的titleLabel 的高度小于按钮本身的大小,但在调用sizeToFit 后手动设置其框架对我没有任何作用。我从普通的UILabel 中注意到了相同的行为,除了当我手动将框架设置为UIButton 的大小时,文本显示完美。当我调用sizeToFit 时,UILabel 的大小与UIButton's titleLabel 的大小相同,并且它还切断了我的大写字母的顶部。此外,由于这是一个 SpriteKit SKView 我添加了这些按钮,我还创建了一个 SKLabelNode 来查看它如何处理自动调整字体大小,它做得非常完美,它的高度比两者都高几个像素我的 UILabel 和我的 UIButton 的 titleLabel 高度。这是一张 imgur 相册,可以直观地展示它,在 S 和小写 i 的点上很明显:

http://imgur.com/a/fy5st

有没有人知道是什么导致了这种情况发生?

【问题讨论】:

【参考方案1】:

如果有人遇到同样的问题并遇到此问题,我只需通过子类化 UIButton 找到解决方案。然后,我只是修改了 layoutSubviews 以便 titleLabel 边界等于按钮的子视图,并且它不再切断字体的顶部。不确定这是否是最好的方法,但它确实有效。

- (void)layoutSubviews

    [super layoutSubviews];
    self.titleLabel.bounds = self.bounds;

【讨论】:

以上是关于调用 sizeToFit 时,UIButton 无法使用自定义字体正确调整高度的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 UIButton sizeToFit/sizeThatFits 的宽度?

sizeToFit 在非常短的字符串周围放置填充

UIButton + 斜体字体 = 剪裁

为啥此代码中需要“sizeToFit”调用?

UILabel sizeToFit 在 iOS 8 中崩溃

根据 titleLabel 的长度调整 UIButton 的大小