Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I truncate a string within a string in a UILabel?

Say I have The Dark Knight Rises at 7:45pm and I need to fit that into a fixed-width UILabel (for iPhone). How would I make that truncate as "The Dark Knight Ris... at 7:45pm" rather than "The Dark Knight Rises at 7:4..."?

like image 580
Aaron Avatar asked Dec 04 '22 00:12

Aaron


2 Answers

UILabel has this property:

@property(nonatomic) NSLineBreakMode lineBreakMode;

You enable that behaviour by setting it to NSLineBreakByTruncatingMiddle.

EDIT

I din't understand that you wanted to truncate only a part of the string.Then read this:

If you want to apply the line break mode to only a portion of the text, create a new attributed string with the desired style information and associate it with the label. If you are not using styled text, this property applies to the entire text string in the text property.

Example

So there is even a class for setting the paragraph style: NSParagraphStyle and it has also it's mutable version.
So let's say that you have a range where you want to apply that attribute:

NSRange range=NSMakeRange(i,j);

You have to create a NSMutableParagraphStyle object and set it's lineBreakMode to NSLineBreakByTruncatingMiddle.Notice that you may set also a lot of other parameters.So let's do that:

NSMutableParagraphStyle* style= [NSMutableParagraphStyle new];
style.lineBreakMode= NSLineBreakByTruncatingMiddle;

Then add that attribute for the attributedText of the label in that range.The attributedText property is a NSAttributedString, and not a NSMutableAttributedString, so you'll have to create a NSMutableAttributedString and assign it to that property:

NSMutableAttributedString* str=[[NSMutableAttributedString alloc]initWithString: self.label.text];
[str addAttribute: NSParagraphStyleAttributeName value: style range: range];
self.label.attributedText= str;

Notice that there are a lot of other properties for a NSAttributedString, check here.

like image 122
Ramy Al Zuhouri Avatar answered Dec 21 '22 06:12

Ramy Al Zuhouri


You have to set the lineBreakMode. You can either do that from Interface Builder or programmatically as follows

label.lineBreakMode = NSLineBreakByTruncatingMiddle;

please note that since iOS 5 the type of such property changed from UILineBreakMode to NSLineBreakMode.

like image 32
Gabriele Petronella Avatar answered Dec 21 '22 05:12

Gabriele Petronella