gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 21:51:51 25 4
gpt4 key购买 nike

我正在使用自动布局和通过 UILables 调整文本大小,它在宽度上工作正常,但在高度上效果不佳。

如果文本在宽度上有空间但在高度上没有空间,则文本不会压缩

任何想法如何创建约束来做到这一点?或者我不可能找到适合矩形的最小文本大小?

最佳答案

您可以将字体设置为自动填充标签的大小,并且可以选择不低于最小字体大小。只需将 adjustsFontSizeToFitWidth 设置为 YES。查看UILabel Class Reference如果您需要更多信息。

尽管 bool 值称为“adjustsFontSizeToWidth”,但它实际上意味着标签高度的最大尺寸,它将保留在标签的一行(或您指定的任意多行)上。

继承 UILabel 并覆盖 layoutSubviews。然后,每次 UILabel 的大小发生变化时,都会重新计算字体大小:

import Foundation
import UIKit

class LabelWithAdaptiveTextHeight: UILabel {

override func layoutSubviews() {
super.layoutSubviews()
font = fontToFitHeight()
}

// Returns an UIFont that fits the new label's height.
private func fontToFitHeight() -> UIFont {

var minFontSize: CGFloat = DISPLAY_FONT_MINIMUM // CGFloat 18
var maxFontSize: CGFloat = DISPLAY_FONT_BIG // CGFloat 67
var fontSizeAverage: CGFloat = 0
var textAndLabelHeightDiff: CGFloat = 0

while (minFontSize <= maxFontSize) {
fontSizeAverage = minFontSize + (maxFontSize - minFontSize) / 2

if let labelText: NSString = text {
let labelHeight = frame.size.height

let testStringHeight = labelText.sizeWithAttributes(
[NSFontAttributeName: font.fontWithSize(fontSizeAverage)]
).height

textAndLabelHeightDiff = labelHeight - testStringHeight

if (fontSizeAverage == minFontSize || fontSizeAverage == maxFontSize) {
if (textAndLabelHeightDiff < 0) {
return font.fontWithSize(fontSizeAverage - 1)
}
return font.fontWithSize(fontSizeAverage)
}

if (textAndLabelHeightDiff < 0) {
maxFontSize = fontSizeAverage - 1

} else if (textAndLabelHeightDiff > 0) {
minFontSize = fontSizeAverage + 1

} else {
return font.fontWithSize(fontSizeAverage)
}
}
}
return font.fontWithSize(fontSizeAverage)
}
}

关于ios - 如何根据标签可用的高度调整 UILabel 字体大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31768036/

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