22

我已经上传了一个自定义字体,并使用以下代码将此字体应用于 UIbutton 的标题

videoButton.titleLabel.font = [UIFont fontWithName:@"LaurenScript" size:20];

问题是标题被夹在第一个字母的顶部(见下图)。我在 UIlabel 上尝试了相同的字体,它工作正常,所以字体没有问题。我还尝试使用更改 rectFrame

[videoButton.titleLabel setFrame:CGRectMake(0, 0, 300, 600)];

但这并没有做任何事情。有人知道我如何解决这个问题吗?干杯

在此处输入图像描述

4

6 回答 6

45

我有一个类似的问题,分音符在标题标签上被切断了。我创建了一个 UIButton 子类并使用此代码来解决问题:

-(void)layoutSubviews
{
    [super layoutSubviews];

    CGRect frame = self.titleLabel.frame;
    frame.size.height = self.bounds.size.height;
    frame.origin.y = self.titleEdgeInsets.top;
    self.titleLabel.frame = frame;
}
于 2014-01-22T10:11:39.607 回答
34

在界面生成器中选择按钮并检查在控制部分中设置垂直对齐面板下面是示例:

在此处输入图像描述

于 2016-02-03T12:01:26.313 回答
10

不确定这对任何人来说是否仍然是一个问题,但我发现(使用自定义字体)上述解决方案并没有最终解决问题,特别是对于UIButton仅以编程方式创建的自定义。

以下是我设法解决此问题的方法,特别是 1 行解决了剪辑问题:

UIButton *button = [[UIButton alloc] init];
button = [UIButton buttonWithType:UIButtonTypeCustom];

[button setTitle:@"Nice!" forState:UIControlStateNormal];
[button setFont:[UIFont fontWithName:<CUSTOM FONT NAME> size:buttonWidth/3.0f]];
button = CGRectMake(0, 0, <WIDTH>, <HEIGHT>);

这是解决剪辑的行:

[button setContentVerticalAlignment:UIControlContentVerticalAlignmentFill];

希望这可以帮助其他仍然被卡住的人。快乐编码!

于 2016-07-13T16:07:41.490 回答
4

我在 swift 2.1 中尝试了这个,我从Antoine的答案中改编了这段代码。这可能不是好的代码,但它现在解决了我的问题。你应该为自己做得更好。

import UIKit

class CustomUIButton: UIButton {

    override func layoutSubviews() {
        if var titleFrame : CGRect = titleLabel?.frame{

            titleFrame.size = self.bounds.size
            titleFrame.origin = CGPointZero
            self.titleLabel!.frame = titleFrame
            self.titleLabel!.textAlignment = .Center
        }
    }
}
于 2015-12-26T19:00:33.743 回答
4

使用带有自定义字体的图像和文本的按钮时遇到同样的问题。一切都必须垂直居中对齐。并且图像没有被拉伸。这对我来说很好。

btn.contentVerticalAlignment = .fill
btn.contentMode = .center
btn.imageView?.contentMode = .scaleAspectFit
于 2017-06-29T20:14:01.303 回答
3

有这个(悲伤的)解决方案:https ://stackoverflow.com/a/10200908/352628

我有一个类似的问题。似乎 titleLabel 非常不可控,要获得控制,您需要将 UILabel 子视图注入按钮...这让我很难过 :(

于 2012-11-05T19:28:20.740 回答