【问题标题】:How to make UILabel resize to fit text如何使 UILabel 调整大小以适合文本
【发布时间】:2017-01-07 11:30:17
【问题描述】:

我有一个 UILabel,我已将它布置在视图中心的情节提要中。它有一些初始文本“点击登录”。

一旦用户登录,我将标签的值更改为用户名。这样做后,标签不再居中,因为 UILabel 没有改变大小。

如何在界面生成器中使用自动布局来做到这一点?

【问题讨论】:

  • 您需要向我们展示您添加的约束以定位标签。
  • 你想根据文字改变标签的宽度吗?

标签: ios xcode interface-builder uistoryboard


【解决方案1】:

我猜标签没有得到高度和宽度,考虑给这些约束,然后当你的文本发生变化时使用这个方法来确定高度和宽度:

    func labelSizeWithString(text: String, maxWidth : CGFloat,numberOfLines : Int) -> CGRect{
    let label = UILabel(frame: CGRectMake(0, 0, maxWidth, CGFloat.max))
    label.numberOfLines = numberOfLines
    label.text = text

    label.sizeToFit()

    return label.frame
}

【讨论】:

  • OP 希望使用自动布局来实现。使用时不能更新框架。
  • 您可以获得更新后的高度和宽度,然后相应地更改高度和重量的约束...请正确阅读我的答案
  • 仅仅为了获取文本的宽度和高度而创建 UILabel 是一种矫枉过正且效率低下的做法。有boundingRectWithSize(_:options:context:) 可以做到这一点。除了获取宽度和高度之外,还不能解决 OP 关于标签居中的问题。无论如何,他必须进行大量计算才能将标签定位到其超级视图的中心。
【解决方案2】:

你可以把UILabelframe.width设置大一点,可能和屏幕一样宽。

然后你设置

label.textAlignment = NSTextAlignmentCenter

【讨论】:

    【解决方案3】:

    1.显示初始文本到标签 2.按下按钮更改文本后,显示在屏幕中间 3.查看约束第三张图像,两个约束给定 1.top 以查看 2.horizo​​ntally middle in container

    如果你为标签指定了固定宽度,则将关系更改为大于等于。[单击宽度限制,请参见右侧顶部更改关系

    【讨论】:

      【解决方案4】:

      看这个截图

      1 首先选择你的标签宽度限制

      2 设置关系大于等于

      3 这里设置默认常量值我设置为10

      当您更改标签文本时,它会根据其文本更改标签的大小。希望对你有帮助:)

      【讨论】:

      • 对于任何查看此内容的人来说还有一点。确保您没有同时设置前导和尾随约束,因为它们会覆盖“大于”约束
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-06
      • 1970-01-01
      • 1970-01-01
      • 2015-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多