I have an NSString, and I want to know its height to create an appropriate UILabel.
Doing this
NSString *string = @"this is an example";
CGSize size = [string sizeWithFont:[UIFont systemFontOfSize:10.0f]
forWidth:353.0
lineBreakMode:UILineBreakModeWordWrap];
float height = size.height;
height is now 13.0. If I use this string
NSString *string = @"this is an example this is an example this is an example
this is an example this is an example this is an example
this is an example this is an example this is an example
this is an example this is an example this is an example
this is an example this is an example this is an example
this is an example ";
height is always 13.0 (and with 353 as width, that's impossible)... what am I doing wrong?
ADD:
size.width;
works fine... so it's like if the lineBreakMode is not correct... but it is, isn't it?
The reason what you're doing doesn't work as you would expect is because
– sizeWithFont:forWidth:lineBreakMode:
is for "Computing Metrics for a Single Line of Text" whereas
-sizeWithFont:constrainedToSize:lineBreakMode:
is for "Computing Metrics for Multiple Lines of Text". From the documentation:
Computing Metrics for a Single Line of Text
– sizeWithFont: – sizeWithFont:forWidth:lineBreakMode: – sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:
Computing Metrics for Multiple Lines of Text
– sizeWithFont:constrainedToSize: – sizeWithFont:constrainedToSize:lineBreakMode:
Try using -sizeWithFont:constrainedToSize:lineBreakMode:
instead, e.g. this is what I usually do:
CGSize maximumLabelSize = CGSizeMake(353,9999);
CGSize expectedLabelSize = [string sizeWithFont:label.font
constrainedToSize:maximumLabelSize
lineBreakMode:label.lineBreakMode];
CGRect newFrame = label.frame;
newFrame.size.height = expectedLabelSize.height;
label.frame = newFrame;