Ça y est. Cela fonctionne avec attributedText
, avant de retomber dans la plaine text
, ce qui a beaucoup de sens pour nous, gens qui traitons plusieurs familles de polices, tailles et même NSTextAttachments!
Fonctionne bien avec la mise en page automatique, mais de toute évidence, les contraintes doivent être définies et définies avant de vérifier isTruncated
, sinon l'étiquette elle-même ne saura même pas comment se présenter, donc il ne saurait même pas si elle est tronquée.
Il ne fonctionne pas d'aborder ce problème avec juste un simple NSString
et sizeThatFits
. Je ne sais pas comment les gens obtenaient des résultats positifs comme ça. BTW, comme mentionné à de nombreuses reprises, l'utilisation sizeThatFits
n'est pas du tout idéale car elle prend en compte numberOfLines
la taille résultante, ce qui va à l'encontre de l'objectif de ce que nous essayons de faire, car elle isTruncated
reviendrait toujours, qu'elle false
soit tronquée ou non.
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
}
}