I'm trying to set up a text view to show lines of text, along with line numbers on the right margin. The string for the text view would look something like this:
"Text of first line" + "Line 1" + "\n" + "Text of second line" + "Line 2" + "\n"
I want the end result to look something like this:
Into my heart an air that kills, 1
From yon far country blows: 2
What are those blue remembered hills, 3
What spires, what farms are those? 4
(Sorry about the crooked right column: it looked fine in the message editor. The numbers should all be in a straight column, aligned to the right margin of the text view.)
Is it possible to use an NSAttributedString to do this? I've tried several different ways of constructing such a string, but no luck so far. I'm beginning to think this is the wrong approach entirely. What is the best way to get the kind of layout that I want?
hi Albinus,
using some code i was looking at yesterday (you may recognize it), you can do this with tabStops. i did exactly what you asked, but placing the text in a 4-line label as white text on a blue background ("testLabel" was set up as an @IBOutlet in a storyboard and this code is executed on viewWillAppear())
testLabel.backgroundColor = UIColor.blue
testLabel.numberOfLines = 4
let myStyle = NSMutableParagraphStyle()
let labelWidth = testLabel.frame.size.width
myStyle.tabStops = [NSTextTab(textAlignment: .left, location: 0.0, options: [:]),
NSTextTab(textAlignment: .right, location: labelWidth, options: [:])]
let tabChar = "\t"
let returnChar = "\r"
let content = "Into my heart an air that kills" + tabChar + "1" + returnChar +
"From yon far country blows:" + tabChar + "2" + returnChar +
"What are those blue remembered hills" + tabChar + "3" + returnChar +
"What spires, what farms are those?" + tabChar + "4" + returnChar
let attributes: [NSAttributedString.Key: Any] = [.foregroundColor: UIColor.white]
let attrString = NSMutableAttributedString(string: content, attributes: attributes)
attrString.addAttribute(.paragraphStyle, value: myStyle, range: NSRange(location: 0, length: content.count-1))
testLabel.attributedText = attrString
the results should be transferrable to a UITextView()
hope that helps,
DMG