IOS 和 Swift 中 UILabel 的实际行数计算行为不一致
Inconsistent behavior with number of actual lines calculation for UILabel in IOS with Swift
我正在使用下面的 UILabel 扩展方法来计算 UILabel 中的实际行数。但是,我看到它总是比实际行数多returns。此外,它returns 的多余行数并不总是相同的。所以,我不能在使用该值之前用固定常数减去它。任何关于这里出了什么问题的想法。我已经看过堆栈溢出中发布的解决方案,但它们也没有帮助。
extension UILabel {
var maxNumberOfLines: Int {
guard let text = text, let font = font else {
return 0
}
let charSize = font.lineHeight
let textSize = (text as NSString).boundingRect(
with: CGSize(width: frame.width, height: .greatestFiniteMagnitude),
options: .usesLineFragmentOrigin,
attributes: [.font: font],
context: nil)
let linesRoundedUp = Int(ceil(textSize.height/charSize))
return linesRoundedUp
}
}
因为我试图在索引路径委托方法的行中查找单元格中 UILabel 的行数,所以我得到了错误的结果,因为 UILabel 还没有布置在表视图单元格中。我使用 UIScreen.main.bounds - 一些偏移量代替标签宽度来计算行数,这解决了问题。
准确的说,我用的是
extension UILabel {
var maxNumberOfLines: Int {
guard let text = text, let font = font else {
return 0
}
let charSize = font.lineHeight
let textSize = (text as NSString).boundingRect(
with: CGSize(width: UIScreen.main.bounds.width - SOMEOFFSET, height: .greatestFiniteMagnitude),
options: .usesLineFragmentOrigin,
attributes: [.font: font],
context: nil)
let linesRoundedUp = Int(ceil(textSize.height/charSize))
return linesRoundedUp
}
}
我正在使用下面的 UILabel 扩展方法来计算 UILabel 中的实际行数。但是,我看到它总是比实际行数多returns。此外,它returns 的多余行数并不总是相同的。所以,我不能在使用该值之前用固定常数减去它。任何关于这里出了什么问题的想法。我已经看过堆栈溢出中发布的解决方案,但它们也没有帮助。
extension UILabel {
var maxNumberOfLines: Int {
guard let text = text, let font = font else {
return 0
}
let charSize = font.lineHeight
let textSize = (text as NSString).boundingRect(
with: CGSize(width: frame.width, height: .greatestFiniteMagnitude),
options: .usesLineFragmentOrigin,
attributes: [.font: font],
context: nil)
let linesRoundedUp = Int(ceil(textSize.height/charSize))
return linesRoundedUp
}
}
因为我试图在索引路径委托方法的行中查找单元格中 UILabel 的行数,所以我得到了错误的结果,因为 UILabel 还没有布置在表视图单元格中。我使用 UIScreen.main.bounds - 一些偏移量代替标签宽度来计算行数,这解决了问题。
准确的说,我用的是
extension UILabel {
var maxNumberOfLines: Int {
guard let text = text, let font = font else {
return 0
}
let charSize = font.lineHeight
let textSize = (text as NSString).boundingRect(
with: CGSize(width: UIScreen.main.bounds.width - SOMEOFFSET, height: .greatestFiniteMagnitude),
options: .usesLineFragmentOrigin,
attributes: [.font: font],
context: nil)
let linesRoundedUp = Int(ceil(textSize.height/charSize))
return linesRoundedUp
}
}