Это оно. Это работает с attributedText
, прежде чем вернуться к простому text
, что имеет большой смысл для нас, людей, которые имеют дело с несколькими семействами шрифтов, размерами и даже NSTextAttachments!
Отлично работает с автопложением, но, очевидно, ограничения должны быть определены и установлены до того, как мы проверим isTruncated
, иначе сама метка даже не знает, как себя выложить, поэтому она даже не узнает, усечена ли она.
Невозможно подойти к этой проблеме с помощью простых NSString
и sizeThatFits
. Я не уверен, как люди получали такие положительные результаты. Кстати, как неоднократно упоминалось, использование sizeThatFits
совсем не идеально, потому что оно учитывает numberOfLines
для результирующего размера, что сводит на нет всю цель того, что мы пытаемся сделать, потому что isTruncated
всегда будет возвращать false
независимо от того, усечено оно или нет. .
extension UILabel {
var isTruncated: Bool {
layoutIfNeeded()
let rectBounds = CGSize(width: bounds.width, height: .greatestFiniteMagnitude)
var fullTextHeight: CGFloat?
if attributedText != nil {
fullTextHeight = attributedText?.boundingRect(with: rectBounds, options: .usesLineFragmentOrigin, context: nil).size.height
} else {
fullTextHeight = text?.boundingRect(with: rectBounds, options: .usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font: font], context: nil).size.height
}
return (fullTextHeight ?? 0) > bounds.size.height
}
}
person
Lucas Chwe
schedule
31.10.2018
UILabel
API. - person funct7   schedule 26.08.2018