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

Posted

技术标签:

【中文标题】如何使用自动布局调整 UILabel 宽度以适合文本?【英文标题】:How to resize UILabel width to fit text using autolayout? 【发布时间】: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,文本会被截断 ***.com/questions/27459746/…检查这个答案,也许它可以帮助你解决你的问题。 【参考方案1】:

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

    您可以将前导和尾随约束从 0 增加到您需要的任何值。 您可以创建另一个UIView 来放置您的标签。标签应该具有与您想要的填充一样多的前导和尾随约束。这应该会自动调整您的视图大小 使用 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

【讨论】:

以上是关于如何使用自动布局调整 UILabel 宽度以适合文本?的主要内容,如果未能解决你的问题,请参考以下文章

自动布局以动态调整 UILabel 大小不起作用

如何使用自动布局将 UILabel 设置为 UICell 宽度的百分比

如何根据标签可用的高度调整 UILabel 字体大小

自动布局 - UILabel 在方向更改后宽度缩小,这是由另一个应该自动调整字体大小的 UILabel 引起的

如何调整字体大小以适应 UILabel 的高度和宽度

自动调整 UILabel 文本大小以适应 UILabel 宽度