ricks
ricks

Reputation: 3324

How to truncate UILabel to show '...' at the end of the string

I have a UILabel() i am trying to truncate.

    let nameLabel: UILabel = {
        let label = UILabel()
        label.textColor = .black
        label.translatesAutoresizingMaskIntoConstraints = false
        label.font = UIFont.systemFont(ofSize: 11)
        label.numberOfLines = 0
        //label.lineBreakMode = .byTruncatingTail
        //label.adjustsFontSizeToFitWidth = false
        label.textAlignment = .center
        label.sizeToFit()

        return label
    }()

here are my constraints:

    nameLabel.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
    nameLabel.widthAnchor.constraint(equalTo: self.widthAnchor, constant: -10).isActive = true
    nameLabel.topAnchor.constraint(equalTo: profileImageView.bottomAnchor, constant: 8).isActive = true

The issue that i am having is that the actual string gets truncated but instead of having the string 'Johnson Rodriguez' truncate to ''Johnson Rod...'' it ends up cropping out anything after the space, resulting in the label displaying 'Johnson'

These are the things i have tried using:

    label.lineBreakMode = .byTruncatingTail 
    label.sizeToFit()
    label.preferredMaxLayoutWidth = 70

This is what i have seen other people use but for some reason i cant get it to display the ... instead of truncating the string at the first space.

Upvotes: 2

Views: 3085

Answers (1)

koen
koen

Reputation: 5729

Setting numberOfLines to 1 should do the trick for you.

From the docs:

This property controls the maximum number of lines to use in order to fit the label’s text into its bounding rectangle. The default value for this property is 1. To remove any maximum limit, and use as many lines as needed, set the value of this property to 0.

Upvotes: 4

Related Questions