我有以下代码…

UILabel *buttonLabel = [[UILabel alloc] initWithFrame:targetButton.bounds];
buttonLabel.text = @"Long text string";
[targetButton addSubview:buttonLabel];
[targetButton bringSubviewToFront:buttonLabel];

...这个想法是,我可以有多行文本的按钮,但文本总是被UIButton的backgroundImage掩盖。显示按钮子视图的日志调用显示UILabel已添加,但文本本身无法看到。这是UIButton的bug还是我做错了什么?


当前回答

这里的答案告诉你如何实现多行按钮标题编程。

我只是想添加,如果你正在使用故事板,你可以输入[Ctrl+Enter]强制在按钮标题字段换行。

HTH

其他回答

self.btnError.titleLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping

self.btnError.titleLabel?.textAlignment = .center

self.btnError.setTitle("Title", for: .normal)

如果你在iOS 6上使用自动布局,你可能还需要设置preferredmaxlayoutidth属性:

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.textAlignment = NSTextAlignmentCenter;
button.titleLabel.preferredMaxLayoutWidth = button.frame.size.width;

如果你想添加一个带有多行居中标题的按钮,请为该按钮设置界面生成器的设置:

[]

如果你使用自动布局。

button.titleLabel?.adjustsFontSizeToFitWidth = true
button.titleLabel?.numberOfLines = 2

现在,如果你真的需要在接口构建器中逐个访问这类东西,你可以用一个简单的扩展,像这样:

extension UIButton {
    @IBInspectable var numberOfLines: Int {
        get { return titleLabel?.numberOfLines ?? 1 }
        set { titleLabel?.numberOfLines = newValue }
    }
}

然后你可以简单地将numberolines设置为任何UIButton或UIButton子类的属性,就像它是一个标签一样。同样的道理也适用于其他一大堆通常无法访问的值,比如视图层的角半径,或者它所投射的阴影的属性。