NSTextAlignment.Justified for UILabel not working

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

Declaring 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 NSTextAlignment.Justified to justify my text. Should I use a UITextView ?

+8
uilabel swift text-alignment justify
source share
4 answers

You need to create an NSMutableParagraphStyle in combination with an NSAttributedString to display the text as warranted. The important part is to set the value of NSBaselineOffsetAttributedName to 0.0.

Here is an example of 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: stack overflow

+29
source share
 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 the justifyLabel () function like this ...

 myLabel.attributedText = justifyLabel(myLabel.text!) 
+4
source share

You can use UITextView for your problem.

 bottleDescriptionTextView = UITextView(frame: CGRect(x: widthMargin, y: bottleDescriptionTextView.frame.maxY + heightMargin, width: self.view.frame.width - (2 * widthMargin), height: heightBottleDescription - (2 * heightMargin))) bottleDescriptionTextView.font = UIFont(name: "AvenirNext-Regular", size: 16) bottleDescriptionTextView.text = bottleDescriptionString bottleDescriptionTextView.textAlignment = NSTextAlignment.Justified 
-one
source share

Objective-C is the ideal upgrade solution to use the NSMutableParagraphStyle test on xCode 7 and iOS 9

 NSMutableParagraphStyle *paragraphStyles = [[NSMutableParagraphStyle alloc] init]; paragraphStyles.alignment = NSTextAlignmentJustified; //justified text paragraphStyles.firstLineHeadIndent = 1.0; NSDictionary *attributes = @{NSParagraphStyleAttributeName: paragraphStyles}; NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString: YourString attributes: attributes]; YourLabel.attributedText = attributedString; 
-one
source share

All Articles