How can I compute the number of lines of a UILabel with a fixed width and a given text ?
3 Answers
This code assumes label
has the desired text and its frame is already set to the desired width.
- (int)lineCountForLabel:(UILabel *)label {
CGSize constrain = CGSizeMake(label.bounds.size.width, FLT_MAX);
CGSize size = [label.text sizeWithFont:label.font constrainedToSize:constrain lineBreakMode:UILineBreakModeWordWrap];
return ceil(size.height / label.font.lineHeight);
}
Update:
If all you want is to determine the required height for the label based on its text and current width, then change this to:
- (CGSize)sizeForLabel:(UILabel *)label {
CGSize constrain = CGSizeMake(label.bounds.size.width, FLT_MAX);
CGSize size = [label.text sizeWithFont:label.font constrainedToSize:constrain lineBreakMode:UILineBreakModeWordWrap];
return size;
}
The returned size
is the proper width and height to contain the label.
-
Your question asked about calculating the number of lines. Are you saying you really want the required height (in points)? – rmaddy Mar 01 '13 at 16:01
-
as you wrote the number of lines equals the height divided by the lineHeight. I actually wanted to know the number of lines in order to compute the correct height for my label while keeping the width fixed. – Alexis Mar 01 '13 at 16:07
-
4
-
First get the height of the label from the label size using constrainedSize
CGSize labelSize = [label.text sizeWithFont:label.font
constrainedToSize:label.frame.size
lineBreakMode:UILineBreakModeWordWrap];
CGFloat labelHeight = labelSize.height;
once you have the label height then check the number of lines with the font size where fontsize
is the size you are using for your label. e.g it could be 10 or depending on your requirements
CGSize sizeOfText = [label.text sizeWithFont:label.font
constrainedToSize:label.frame.size
lineBreakMode:UILineBreakModeWordWrap];
int numberOfLines = sizeOfText.height / label.font.pointSize;

- 68,471
- 58
- 283
- 421

- 12,655
- 23
- 43
- 64
You can compute the vertical height necessary to display the string using the sizeWithFont:constrainedToSize: method on NSString. Given that size, you can resize the label to display the entire string.

- 1,266
- 11
- 20