【问题标题】:UIButton with multi-line titleLabel in InterfaceBuilderInterfaceBuilder中带有多行titleLabel的UIButton
【发布时间】:2013-09-10 16:12:31
【问题描述】:

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

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

【问题讨论】:

标签: ios cocoa-touch uibutton interface-builder


【解决方案1】:

代码:

要允许多行,您可以使用:

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
  • Attributes Inspector 下的右侧实用程序窗格中,您将看到 Line Break 选项
  • 选择自动换行

【讨论】:

  • @AsenKasimov 你有什么问题?原始答案/问题与故事板无关
  • 问题是我认为与原始问题相同的问题包含更多答案,并且多年来添加了更多信息。喜欢这个stackoverflow.com/a/33255117/466577
【解决方案2】:

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

  • 首先通过简单地设置换行功能。不过,这提供了有限的可定制性。
  • 要获得更多可定制性,请将“纯文本”更改为“属性文本”,然后您无需任何代码即可完成大部分操作。

【讨论】:

    【解决方案3】:

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

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

    然后你可以设置 KeyPath 为

    titleLabel.numberOfLines
    

    在身份检查器中:

    【讨论】:

    • 哇,这个不错!
    【解决方案4】:

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

    斯威夫特:

    button.titleLabel?.lineBreakMode = NSLineBreakMode.byTruncatingTail

    button.titleLabel?.numberOfLines = 2

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

    【讨论】:

      猜你喜欢
      • 2019-07-11
      • 2022-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      相关资源
      最近更新 更多