gpt4 book ai didi

ios - 动态调整内部文本大小以适应后动态调整 UILabel 框架高度

转载 作者:行者123 更新时间:2023-11-28 07:22:24 28 4
gpt4 key购买 nike

我使用的 UILabel 被限制为固定宽度,并且不超过特定高度(固定为屏幕尺寸的一半)

为了让我们的应用程序能够跨 iOS 设备工作,我将 UILabel 上的 adjustsfontsizetofitwidth 设置为 true。如果屏幕尺寸较小,这会导致调整文本的字体大小。

但是,如果字体实际调整了大小,UILabel 现在似乎对文本有额外的顶部和底部填充。这被标记为其固有内容大小的一部分。

这个额外的垂直填充是有问题的,因为我有一个按钮需要位于最后一行文本基线的正下方。

我现在需要一种方法来重新调整我的框架以紧密适应新调整的文本大小。

我尝试在 layoutSubviews() 中为我的 View 类使用 sizeToFit()invalidateIntrinsicContentSize,但无济于事。

看起来类似于thisthis ,两者都没有适合我的答案。

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)
}
}

最佳答案

当您需要使文本适合框架或根据文本大小拉伸(stretch)框架时,您可以从内置行为中获益。在我看来,你两者都需要。因此,您必须自己做。

大致流程如下:

  • 获取您要分配给标签的文本
  • 在知道文本宽度的情况下计算文本的高度 ( see this )
  • 如果文本高度大于最大标签高度,则将标签设置为最大高度,否则将其设置为文本高度
  • 将文本分配给标签

关于ios - 动态调整内部文本大小以适应后动态调整 UILabel 框架高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57702585/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com