23

我一直在想,有没有一种在 Interface Builder 中UIButtons使用多行的好方法?titleLabel我没有找到,并UILabel在每个按钮的顶部放置一个单独的按钮,并在按下和其他事件时跟踪它的颜色并不是很简单。

如果 IB 中没有这样的方法,也许有更好的代码替代方案?

4

4 回答 4

59

Code:

To allow multiple line you can use:

button.titleLabel.lineBreakMode = UILineBreakModeWordWrap;
button.titleLabel.textAlignment = UITextAlignmentCenter;
[button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];

In iOS 6, UILineBreakModeWordWrap and UITextAlignmentCenter are deprecated, so use:

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.textAlignment = NSTextAlignmentCenter;

Interface Builder:

  • In interface builder select UIButton
  • on the right side Utilities pane under Attributes Inspector, you'll see an option for Line Break
  • Choose Word Wrap
于 2013-09-06T14:18:04.437 回答
4

您可以通过多种方式单独在 Interface Builder 中进行操作。

  • 首先通过简单地设置换行功能。但是,这提供了有限的可定制性。
  • 要获得更多可定制性,请将“纯文本”更改为“属性文本”,然后您无需任何代码即可完成大部分操作。
于 2015-06-02T15:32:40.320 回答
3

如果您只使用普通的 XCode 9.4:

在属性检查器中将换行符设置为任何选项(以启用 numberOfLines):

XCode 的第一步

然后您可以将 KeyPath 设置为

titleLabel.numberOfLines

在身份检查器中:

XCode中的第二步

于 2018-06-04T16:00:11.273 回答
0

顺便提一下,如果不想换行但仍想在 UIButton 上实现多行标题,可以通过在 numberOfLines 之前设置 lineBreakMode 来完成,这是因为 lineBreakMode 似乎取消了 numberOfLines 设置,因此我们按此顺序进行操作。

迅速:

button.titleLabel?.lineBreakMode = NSLineBreakMode.byTruncatingTail

button.titleLabel?.numberOfLines = 2

button.setTitle(myTitle, for: UIControlState.normal)

于 2017-02-21T10:09:48.147 回答