यदि आप मल्टीलाइन समर्थन के साथ पाठ की चौड़ाई प्राप्त करने के लिए संघर्ष कर रहे हैं , तो आप अगले कोड ( स्विफ्ट 5 ) का उपयोग कर सकते हैं :
func width(text: String, height: CGFloat) -> CGFloat {
let attributes: [NSAttributedString.Key: Any] = [
.font: UIFont.systemFont(ofSize: 17)
]
let attributedText = NSAttributedString(string: text, attributes: attributes)
let constraintBox = CGSize(width: .greatestFiniteMagnitude, height: height)
let textWidth = attributedText.boundingRect(with: constraintBox, options: [.usesLineFragmentOrigin, .usesFontLeading], context: nil).width.rounded(.up)
return textWidth
}
और इसी तरह आप पाठ की ऊंचाई पा सकते हैं यदि आपको जरूरत है (बस कोस्ट्रेन्थबॉक्स कार्यान्वयन स्विच करें):
let constraintBox = CGSize(width: maxWidth, height: .greatestFiniteMagnitude)
या यहाँ बहुस्तरीय समर्थन के साथ पाठ का आकार प्राप्त करने के लिए एक एकीकृत कार्य है:
func labelSize(for text: String, maxWidth: CGFloat, maxHeight: CGFloat) -> CGSize {
let attributes: [NSAttributedString.Key: Any] = [
.font: UIFont.systemFont(ofSize: 17)
]
let attributedText = NSAttributedString(string: text, attributes: attributes)
let constraintBox = CGSize(width: maxWidth, height: maxHeight)
let rect = attributedText.boundingRect(with: constraintBox, options: [.usesLineFragmentOrigin, .usesFontLeading], context: nil).integral
return rect.size
}
उपयोग:
let textSize = labelSize(for: "SomeText", maxWidth: contentView.bounds.width, maxHeight: .greatestFiniteMagnitude)
let textHeight = textSize.height.rounded(.up)
let textWidth = textSize.width.rounded(.up)