раствор Swift 3
Я думаю, что лучшее решение - (1) создать UILabel
с теми же свойствами, что и у метки, которую вы проверяете на усечение, (2) , позвонить .sizeToFit()
, (3) сравните атрибуты фиктивной метки с вашей фактической меткой.
Например, если вы хотите проверить, усекается ли метка с одной линией, которая имеет переменную ширину, или нет, то вы можете использовать это расширение:
extension UILabel {
func isTruncated() -> Bool {
let label = UILabel(frame: CGRect(x: 0, y: 0, width: CGFloat.greatestFiniteMagnitude, height: self.bounds.height))
label.numberOfLines = 1
label.font = self.font
label.text = self.text
label.sizeToFit()
if label.frame.width > self.frame.width {
return true
} else {
return false
}
}
}
... но опять же, вы можете легко изменить приведенный выше код в соответствии со своими потребностями. Допустим, ваш ярлык многоуровневый и имеет разную высоту. Тогда расширение будет выглядеть примерно так:
extension UILabel {
func isTruncated() -> Bool {
let label = UILabel(frame: CGRect(x: 0, y: 0, width: self.bounds.width, height: CGFloat.greatestFiniteMagnitude))
label.numberOfLines = 0
label.font = self.font
label.text = self.text
label.sizeToFit()
if label.frame.height > self.frame.height {
return true
} else {
return false
}
}
}