Search code examples
iosuilabelios7

Calculating number of lines of dynamic UILabel (iOS7)


There are many solutions to this questions arround but couldn't find non-deprecated one.

I have an UILabel with mode WordWrap and fixed width of, let's say 250. Lines are set to 0.

Here is what I tried:

UILabel *contentLabel = (UILabel*)[contentView viewWithTag:10];
CGSize size = [contentLabel.text sizeWithFont:contentLabel.font forWidth:contentLabel.frame.size.width lineBreakMode:NSLineBreakByWordWrapping];
NSLog(@"Label's height is: %d", size.height);

The output of height param is always 20 (so it's like one line), while te text is like 30 lines long.

I need that for UIScrollView purposes.


Solution

  • Use suggested in documentation method :

    - (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context NS_AVAILABLE_IOS(7_0);
    

    E.g.

        CGSize maxSize = CGSizeMake(self.label.frame.size.width, MAXFLOAT);
    
        CGRect labelRect = [self.label.text boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.label.font} context:nil];
    
        NSLog(@"size %@", NSStringFromCGSize(labelRect.size));