【发布时间】:2020-01-02 06:46:31
【问题描述】:
我正在使用一个 UILabel,该 UILabel 被限制为固定宽度,并且不超过某个高度(例如,固定为屏幕大小的一半)
为了让我们的应用能够跨 iOS 设备运行,我在 UILabel 上将 adjustsfontsizetofitwidth 设置为 true。如果屏幕尺寸很小,这会导致文本字体大小的调整。
但是,如果实际调整了字体大小,UILabel 现在似乎对文本有额外的顶部和底部填充。这被标记为其内在内容大小的一部分。
这个额外的垂直填充是有问题的,因为我有一个按钮需要位于最后一行文本基线的正下方。
我现在需要一种方法来重新调整我的框架以紧密适应新调整的文本大小。
我尝试在 layoutSubviews() 中使用 sizeToFit() 和 invalidateIntrinsicContentSize 作为我的视图类,但无济于事。
class ProblemExample: UIViewController {
private let instructionsLabel: UILabel = {
let label = UILabel().disableAutoresizingMask()
label.numberOfLines = 0
label.text = "Lorem ipsum dolor sit amet, ut adhuc argumentum vix, vix eruditi appetere corrumpit in. Quod cibo mnesarchum ex sea. Ad qui case assum delicata, ei laudem prodesset democritum per, alia admodum efficiantur has id. Semper integre ei est, quo dolor causae definitionem ei. Malis impedit vim at, vero quas sit ea. Quaeque expetenda an est."
label.font = Theme.headingFont // BIG FONT
label.setLineSpacing(multiple: 1.15)
label.textColor = .black
label.lineBreakMode = .byTruncatingTail
label.adjustsFontSizeToFitWidth = true;
label.minimumScaleFactor = 0.5
return label
}()
override func viewDidLoad() {
super.viewDidLoad()
self.addSubview(instructionsLabel)
// Using https://github.com/roberthein/TinyConstraints for syntactical lightness
instructionsLabel.widthToSuperview(multiplier:0.5)
instructionsLabel.heightToSuperview(multiplier:0.5, relation:.equalOrLess)
instructionsLabel.centerYToSuperview()
button = UIButton()
self.addSubView()
button.bottom(to: instructionsLabel)
}
}
【问题讨论】:
-
如果您需要动态高度,则不要使用此约束 heightToSuperview ..... 只需使用 left、right、bottom、top 约束,您可以使用宽度约束但不能使用高度。
-
@Winston try "label.lineBreakMode = .wordWrap" 然后它会增加高度。考虑到您已经给出了所有适当的约束(顶部、领先、训练、底部)并记住顶部和底部约束不是固定值。
-
我计算UILabel高度的方法,stackoverflow.com/a/45182097/419348
-
@AbuUlHassan 我的意思是 heightToSuperview 小于或等于约束。