Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSTextAlignment.Justified for UILabel does not work

I am trying to justify my UILabel text but it does not work.

Declaration of my UIView:

descriptionUIView = UIView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)

Declaration of my UILabel:

bottleDescriptionLabel = UILabel(frame: CGRect(x: widthMargin, y: bottleDescriptionTitleLabel.frame.maxY + heightMargin, width: self.view.frame.width - (2 * widthMargin), height: heightBottleDescription - (2 * heightMargin)))
bottleDescriptionLabel.font = UIFont(name: "AvenirNext-Regular", size: 16)
bottleDescriptionLabel.text = bottleDescriptionString
bottleDescriptionLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
bottleDescriptionLabel.textAlignment = NSTextAlignment.Justified
bottleDescriptionLabel.numberOfLines = 0

And it looks like this:

enter image description here

I don't know what else to use that NSTextAlignment.Justified to justified my text. Should I use a UITextView instead?

like image 232
magohamoth Avatar asked Nov 21 '14 11:11

magohamoth


3 Answers

You have to create an NSMutableParagraphStyle in combination with an NSAttributedString in order to display text as justified. The important part is to set NSBaselineOffsetAttributedName to 0.0.

Here's an example how to put everything together:

let sampleText = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."

let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = NSTextAlignment.Justified

let attributedString = NSAttributedString(string: sampleText,
    attributes: [
        NSParagraphStyleAttributeName: paragraphStyle,
        NSBaselineOffsetAttributeName: NSNumber(float: 0)
    ])

let label = UILabel()
label.attributedText = attributedString
label.numberOfLines = 0
label.frame = CGRectMake(0, 0, 400, 400)


let view = UIView()
view.frame = CGRectMake(0, 0, 400, 400)
view.addSubview(label)

Credits for NSBaselineOffsetAttributedName: https://stackoverflow.com/a/19445666/2494219

like image 179
Devran Cosmo Uenal Avatar answered Oct 22 '22 13:10

Devran Cosmo Uenal


I have been facing this and looking for answer, and I use only this line instead of paragraphStyle or NSAttributedString.

self.labelDescription.textAlignment = .justified
like image 31
Syed Asad Ali Kazmi Avatar answered Oct 22 '22 14:10

Syed Asad Ali Kazmi


func justifyLabel(str: String) -> NSAttributedString
{
    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.alignment = NSTextAlignment.Justified
    let attributedString = NSAttributedString(string: str,
                                              attributes: [
                                                NSParagraphStyleAttributeName: paragraphStyle,
                                                NSBaselineOffsetAttributeName: NSNumber(float: 0)
        ])

    return attributedString
}

call justifyLabel() function like this...

myLabel.attributedText = justifyLabel(myLabel.text!)
like image 20
Piyush Sanepara Avatar answered Oct 22 '22 14:10

Piyush Sanepara