views:

666

answers:

2

Hi.

A "quicky": how can I get the size (width) of a NSString?

I'm trying to see if the string width of a string to see if it is bigger than a given width of screen, case in which I have to "crop" it and append it with "...", getting the usual behavior of a UILabel. string.length won't do the trick since AAAAAAAA and iiiiii have the same length but different sizes (for example).

I'm kind of stuck.

Thanks a lot.

+1  A: 

You need to use Core Graphics to measure the string, as rendered in your specified font and size. See the answers to http://stackoverflow.com/questions/1435544/measuring-the-pixel-width-of-a-string-in-objective-c for a walkthrough.

calmh
neva's answer did the trick.thanks anyway.
camilo
+5  A: 

This is a different approach. Find out the minimum size of the text so that it won't wrap to more than one line. If it wraps to over one line, you can find out using the height.

You can use this code:

CGSize maximumSize = CGSizeMake(300, 9999);
NSString *myString = @"This is a long string which wraps";
UIFont *myFont = [UIFont fontWithName:@"Helvetica" size:14];
CGSize myStringSize = [myString sizeWithFont:myFont 
    constrainedToSize:maximumSize 
    lineBreakMode:self.myLabel.lineBreakMode];

300 is the width of the screen with a little space for margins. You should substitute your own values for font and size, and for the lineBreakMode if you're not using IB.

Now myStringSize will contain a height which you can check against the height of something you know is only 1 line high (using the same font and size). If it's bigger, you'll need to cut the text. Note that you should add a ... to the string before you check it again (adding the ... might push it over the limit again).

Put this code in a loop to cut the text, then check again for the correct height.

nevan
Thanks a lot!Your answer was correct, and the trick to append the "..." before checking the size again was wise.
camilo