如何使用自动布局调整 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
如何在不计算宽度的情况下做到这一点,只使用自动布局。
我们通常不向标签添加填充。我们使用另一种解决方案:
- 您可以将前导和尾随约束从 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
更好。
您可以将 UILabel 放在 UIView 中并为该视图提供约束(填充)。
在swift
yourtextLabel.adjustsFontSizeToFitWidth = true
yourtextLabel.minimumScaleFactor = 0.5
我有一个具有以下约束的 UILabel
Height = 30
Leading = superview leading
Center Y = superview center Y
标签文本根据 api 响应更改。我正在使用 label.sizeToFit()
来更改标签的宽度。
现在我想在标签中添加一些 space。新宽度应为
textsize + 50
如何在不计算宽度的情况下做到这一点,只使用自动布局。
我们通常不向标签添加填充。我们使用另一种解决方案:
- 您可以将前导和尾随约束从 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
更好。
您可以将 UILabel 放在 UIView 中并为该视图提供约束(填充)。
在swift
yourtextLabel.adjustsFontSizeToFitWidth = true
yourtextLabel.minimumScaleFactor = 0.5