我有一个UILabels的集合视图,它受限于容器单元格的宽度和高度。每个UILabel都有可自定义的文本。 我希望这个文本缩小和自动换行,以便以尽可能大的尺寸拟合文本。我已经尝试过许多线程,在objc中读取解决方案,但没有任何作用。我无法弄清楚这一点。我们在这里看到的只是Truncate Tail的最小字体大小,它应该起作用,但是它会继续被削减,我无法弄清楚原因。
任何人都有一些提示给我?我已经尝试了一些编程解决方案,但到目前为止还没有任何工作。
这就是我得到的:
这就是我想要的:
答案 0 :(得分:1)
我遇到了同样的问题。我为UILabel创建了扩展程序来处理该问题。 您可以尝试使其适应您的需求。
// quasar.conf.js
devServer: {
https: {
key: fs.readFileSync('/path/to/server.key'),
cert: fs.readFileSync('/path/to/server.crt'),
ca: fs.readFileSync('/path/to/ca.pem'),
}
}
但是,当您在标签上调用func adjustFontSizeToWidth() {
enum Constants {
static let fontDecrement: CGFloat = 1.0
static let minimumFontSize: CGFloat = 6.0
}
var characterSet = CharacterSet.whitespacesAndNewlines
characterSet.insert(charactersIn: "-")
let words = text?.components(separatedBy: characterSet)
var largestWord = ""
var largestWordWidth: CGFloat = 0
words?.forEach { word in
let wordSize = (word as NSString).size(withAttributes: [NSAttributedString.Key.font: font])
let wordWidth = wordSize.width
if wordWidth > largestWordWidth {
largestWordWidth = wordWidth
largestWord = word
}
}
while largestWordWidth > bounds.width && font.pointSize > Constants.minimumFontSize {
font = font.withSize(font.pointSize - Constants.fontDecrement)
let largestWordSize = (largestWord as NSString).size(withAttributes: [NSAttributedString.Key.font: font])
largestWordWidth = largestWordSize.width
}
}
时,请确保标签具有正确的边界。例如,您可以覆盖adjustFontSizeToWidth()
。
答案 1 :(得分:-1)
这可能适合你
var label = UILabel()
label.text = "Harvard Hills" // "Willis 7", "Arbs"
label.numberOfLines = 2
label.lineBreakMode = .byWordWrapping
label.minimumScaleFactor = 0.6 . // Important - set minimum scale factor
// Now an answer to your question
let numOflines = label.numberOfLines
现在,使用视图控制器中的layoutSubviews
或layoutIfNeeded
刷新标签,并使用行数缩小字体大小。
if numOflines > 1 {
label.font = // reduce font size (by 4 or 8 points)
}
这是结果(我在那里创建了可设计的标签和设置条件):