यह बात है। यह 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
}
}