在InterfaceBuilder中使用多行titleLabel的UIButton

23

我一直在想,是否有一种好的方式在界面构建器中制作带有多行 titleLabelUIButtons? 我没有找到任何方法,并且在每个按钮上放置一个单独的UILabel 并在按下和其他事件时跟踪它的颜色不是非常直观。

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


可能是 https://dev59.com/CnRB5IYBdhLWcg3wgHar 的重复问题。 - Ahmed Ahmedov
4个回答

59

代码:

为了允许多行,您可以使用:

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

iOS 6中,UILineBreakModeWordWrapUITextAlignmentCenter已经过时,因此请使用:

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

接口构建器:

  • 在接口构建器中选择UIButton
  • 在右侧的Utilities面板下的Attributes Inspector中,您将看到一个Line Break选项
  • 选择Word Wrap

1
@AsenKasimov,你有什么问题吗?原始的答案/问题与Storyboard无关。 - Sergey Grischyov
1
问题在于我认为与原始问题相同的问题包含更多的答案,并且在这些年里添加了更多的信息。就像这个 https://dev59.com/CnRB5IYBdhLWcg3wgHar#33255117 - Ahmed Ahmedov

4

您可以在界面构建器中有几种方式完成此操作。

  • 首先,只需设置包装功能即可。但是这样提供的自定义功能有限。
  • 为了获得更多的自定义功能,请将“纯文本”更改为“属性文本”,然后您就可以在不使用任何代码的情况下完成大多数操作。

3
如果您只使用普通的XCode 9.4:
在属性检查器中将"Line Break"设置为任何选项(以启用numberOfLines): XCode第一步 然后,您可以将KeyPath设置为:
titleLabel.numberOfLines

在“身份”检查器中:

XCode中的第二步


哇,这真是个不错的东西! - Borzh

0

如果您不想要自动换行,但仍然希望在UIButton上实现多行标题,可以在设置numberOfLines之前设置lineBreakMode,因为lineBreakMode似乎会取消设置的numberOfLines,因此我们按照这个顺序进行操作。

Swift:

button.titleLabel?.lineBreakMode = NSLineBreakMode.byTruncatingTail

button.titleLabel?.numberOfLines = 2

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接