Reputation: 2121
I'm using ContextLabel to parse @ , # and URL's. This is the best solution i found, cause it sizes correctly and dont affect performance. It firstly parses string at input and than converts it to NSAttributedString
and after this assigns it to attributedText
property of UILabel
. Everything works as expected, except tail truncation - it's very incorrect ( see pic below )
Where shall i start digging - is it wrong attributes on attributed string? Or label layout issue? Thanks!
Upvotes: 34
Views: 14861
Reputation: 76
func htmlToAttributedString() -> NSAttributedString?
{
guard let data = data(using: .utf8) else { return nil }
do
{
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .left
paragraphStyle.lineBreakMode = .byTruncatingTail
let content = try NSMutableAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html, .characterEncoding: String.Encoding.utf8.rawValue], documentAttributes: nil)
content.addAttributes([NSAttributedString.Key.paragraphStyle: paragraphStyle,
NSAttributedString.Key.font: UIFont(name:"Poppins-Medium",size:18),
NSAttributedString.Key.foregroundColor: UIColor(red: (94.0/255.0), green: (90.0/255.0), blue: (90.0/255.0), alpha: 1.0)],
range: NSMakeRange(0, content.length))
return content
}
catch
{
return nil
}
}
Upvotes: 1
Reputation: 493
Following also works irrespective of using AttributedText or normal text.
Make sure to add the below line after setting the AttributedText and font to the label:
label.lineBreakMode = .byTruncatingTail
Upvotes: 22
Reputation: 2492
I had this problem and fixed it by adding a NSParagraphStyle
specifying the desired line break mode:
//assuming myString is an NSMutableAttributedString
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineBreakMode = .byTruncatingTail
let range = NSRange(location: 0, length: myString.mutableString.length)
myString.addAttribute(NSParagraphStyleAttributeName, value: paragraphStyle, range: range)
See Word wrap for NSMutableAttributedString for further reference.
Upvotes: 82