Underline covers text in NSAttributedString
ios, nsattributedstring, swift
Solution
Yes, there is such problem as you have described. It shows up when you use multiline `UILabel`, so not only setting `numberOfLines` to 0, but type more than 1 line in it.
Example
let selectedStringAttributes: [String: Any]
= [NSFontAttributeName: UIFont.boldSystemFont(ofSize: 28),
NSForegroundColorAttributeName: UIColor.green,
NSUnderlineStyleAttributeName: NSUnderlineStyle.styleSingle.rawValue,
NSUnderlineColorAttributeName: UIColor.green]
let label = UILabel(frame: CGRect(x: 100, y: 100, width: 500, height: 100))
label.numberOfLines = 0
label.attributedText = NSAttributedString(string: "String to test underline", attributes: selectedStringAttributes)
And everything will look pretty good.
But if you want to use such text:
label.attributedText = NSAttributedString(string: "String to\ntest underline", attributes: selectedStringAttributes)
or label's width is too short, than:
So the reason for such behaviour is of course bug in `NSAttributedString`. As it mentioned in radar there is a workaround
You should add this attribute to your `NSAttributedString`
NSBaselineOffsetAttributeName: 0
And magic will happen.
Problem
I'm trying to create an attributed string but the underline covers my text instead of appearing behind it: Is there a way to fix this? I'm using the following code: ``` let paragraphStyle = NSMutableParagraphStyle() paragraphStyle.lineSpacing = 10.0 let attributes = [NSForegroundColorAttributeName: UIColor.white, NSUnderlineStyleAttributeName: NSUnderlineStyle.styleThick.rawValue, NSUnderlineColorAttributeName: UIColor.red, NSParagraphStyleAttributeName: paragraphStyle] let attributedString = NSAttributedString(string: "Story", attributes: attributes) ``` Thanks! EDIT: To give more context: I'm displaying the attributed string on a UILabel placed in a .xib file: ``` view.textLabel.attributedText = attributedString ``` The label has the following font: System Bold 32.0 I'm running the code on iPhone 6 - iOS 10.3 simulator. EDIT 2: I should have mentioned that the label may, at some point, contain more than one line of text. That's why the numberOfLines is set to 0. EDIT 3: If anybody encounters this problem -- it seems that there is a lot of difference in how underline is drawn on iOS 9 vs 10 as well as UILabel vs UITextView. I've ended up having to draw the underline myself by subclassing NSLayoutManager.