यह बात है। यह attributedText
वापस मैदान में आने से पहले काम करता है text
, जो हमारे लिए उन लोगों के लिए बहुत मायने रखता है जो कई फ़ॉन्ट परिवारों, आकारों और यहां तक कि NSTextAttachments से निपटते हैं!
ऑटोलैयूट के साथ ठीक काम करता है, लेकिन जाहिर है कि बाधाओं को परिभाषित किया जाना चाहिए और जांचने से पहले सेट किया जाना चाहिए isTruncated
, अन्यथा लेबल खुद को भी पता नहीं होगा कि कैसे खुद को बाहर रखना है, इसलिए कोई रास्ता नहीं भी पता चलेगा कि क्या इसकी काट है।
यह सिर्फ एक सादे के साथ इस समस्या का काम नहीं करता है NSString
और sizeThatFits
। मुझे यकीन नहीं है कि कैसे लोगों को उस तरह सकारात्मक परिणाम मिल रहे थे। BTW, जैसा कि कई बार उल्लेख किया गया है, का उपयोग 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
}
}