如何使用自动布局调整 UILabel 宽度以适合文本?

How to resize UILabel width to fit text using autolayout?

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

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

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

现在我想在标签中添加一些 space。新宽度应为

textsize + 50

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

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

  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 更好。

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

在swift

yourtextLabel.adjustsFontSizeToFitWidth = true
yourtextLabel.minimumScaleFactor = 0.5