【问题标题】:How to resize UILabel width to fit text using autolayout?如何使用自动布局调整 UILabel 宽度以适合文本?
【发布时间】:2019-07-22 11:08:26
【问题描述】:

我有一个具有以下约束的 UILabel

Height = 30
Leading = superview leading
Center Y = superview center Y

标签的文本根据 api 响应而变化。我使用label.sizeToFit() 来更改标签的宽度。

现在我想为标签添加一些空间。新宽度应该是

textsize + 50

如何在不计算宽度的情况下仅使用自动布局来做到这一点。

【问题讨论】:

  • 你试过用.adjustsFontSizeToFitWidth = true
  • @MohmmadS 我没有标签的宽度限制。它的大小根据文本增加。我现在想要一些填充物。喜欢| Hello |。不想要|Hello|
  • 然后看看偏移量
  • @MohmmadS 如果我使用offset,文本会被截断
  • stackoverflow.com/questions/27459746/…检查这个答案,也许它可以帮助你解决你的问题。

标签: ios swift autolayout nslayoutconstraint


【解决方案1】:

我们通常不会向标签添加填充。我们使用另一种解决方案:

  1. 您可以将前导和尾随约束从 0 增加到您需要的任何值。
  2. 您可以创建另一个UIView 来放置您的标签。标签应该具有与您想要的填充一样多的前导和尾随约束。这应该会自动调整您的视图大小
  3. 使用 UIButton,它已经在 Storyboard 中包含内容插图。禁用其用户交互。 (这是一种矫枉过正,但它是一种解决方案)。

如果你真的想要这个,虽然你可以创建一个UILabel 的子类并在几行代码中添加这个功能:

@IBDesignable class AppLabel: UILabel {

    @IBInspectable var horizontalPadding: CGFloat = 0.0 { didSet { invalidateIntrinsicContentSize() } }
    @IBInspectable var verticalPadding: CGFloat = 0.0 { didSet { invalidateIntrinsicContentSize() } }

    override var intrinsicContentSize: CGSize {
        var size = super.intrinsicContentSize
        size.width += horizontalPadding*2.0
        size.height += verticalPadding*2.0
        return size
    }

}

现在您甚至可以在情节提要中设置垂直和水平填充。但是你需要有中心文本对齐。关键是覆盖intrinsicContentSize,它定义了这种自动调整大小。只需为其添加一些价值,它就可以工作。

我个人仍然会避免这种情况,但也许它仍然比使用 UIButton 更好。

【讨论】:

  • 我知道这些解决方案。试图找到更简单的解决方案。最后以第三个解决方案结束
  • @arunsiva 我实际上添加了第四个解决方案。也许在你的情况下它仍然比第三个更好。
【解决方案2】:

您可以将该 UILabel 放在 UIView 中并为该视图提供约束(填充)。

【讨论】:

    【解决方案3】:

    迅速

    yourtextLabel.adjustsFontSizeToFitWidth = true
    yourtextLabel.minimumScaleFactor = 0.5
    

    【讨论】:

      猜你喜欢
      • 2014-01-14
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 2014-11-28
      • 2015-01-28
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      相关资源
      最近更新 更多