如何使用自动布局调整 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 设置为 UICell 宽度的百分比