Eso es todo. Esto funciona con attributedText
, antes de volver a la normalidadtext
, lo que tiene mucho sentido para nosotros, las personas que tratamos con múltiples familias de fuentes, tamaños e incluso NSTextAttachments.
Funciona bien con el diseño automático, pero obviamente las restricciones deben definirse y establecerse antes de que verifiquemos isTruncated
, de lo contrario, la etiqueta en sí ni siquiera sabrá cómo distribuirse, por lo que de ninguna manera sabría si está truncada.
No funciona abordar este problema con un simple NSString
y sizeThatFits
. No estoy seguro de cómo la gente estaba obteniendo resultados positivos como ese. Por cierto, como se mencionó en numerosas ocasiones, el uso sizeThatFits
no es ideal en absoluto porque tiene en cuenta numberOfLines
el tamaño resultante, lo que anula todo el propósito de lo que estamos tratando de hacer, porque isTruncated
siempre volvería false
independientemente de si está truncado o no.
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
}
}