JakeC
JakeC

Reputation: 241

How to fix UILabel padding issue?

I have a UILabel and whenever I set its outlet the padding I created in Storyboards for it under attributed text disappears like it was never there. The text the stays stuck on the left side. How can I fix this issue?

@IBOutlet weak var mycoollabel: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.

    mycoollabel.text = "Wow"
}

Upvotes: 2

Views: 705

Answers (2)

TwoStraws
TwoStraws

Reputation: 13127

Note: OP clarified in a comment that they are setting their padding using attributed text in Interface Builder.

The problem here is a confusion between text and attributed text, or, because these are code, it's text and attributedText.

On iOS, lots of things have a text property, and it's just a simple string of text that gets displayed somewhere without any sort of formatting. Usually the formatting is attached to the object that is showing the text, e.g. a label has a text colour and alignment properties that make its text look however you want.

On iOS, most (all?) of those things also have an attributedText property, which is a very different beast. Attributed text contains a string but also specific formatting instructions required to display that string – text attributes, hence the name.

So, OP is creating an attributed text configuration in their storyboard, then, in code, modifying the text property. This will overwrite their formatted string with a plain string, losing its layout configuration.

If you're looking to create an attributed string with a first line indent, you should try this:

let ps = NSMutableParagraphStyle();
ps.firstLineHeadIndent = 50

let attrs = [NSParagraphStyleAttributeName: ps]
let attributedString = NSAttributedString(string: "Hello, world!", attributes: attrs)

label.attributedText = attributedString

Note that there are a few different options available to you here, so you might need to find the right type of indent for your precise needs. If you right-click on NSMutableParagraphStyle and choose Jump To Definition you'll see all the options.

Upvotes: 2

TotoroTotoro
TotoroTotoro

Reputation: 17622

That's because a UILabel can have either plain text or attributed text. You set attributed text in the storyboard, and add some formatting (padding, etc.). Then, in code, you override that text (and all its formatting) with plain text.

If you want to keep the formatting, you need to set the label's attributedText property. And add all the necessary formatting to the NSAttributedString object you create for that.

Upvotes: 1

Related Questions