How can I make text in a UILabel shrink font size

25,796

Solution 1

descriptionLabel.adjustsFontSizeToFitWidth = YES;
descriptionLabel.minimumFontSize = 10.0; //adjust to preference obviously

The following example is tested and verified on iPhone Simulator 3.1.2:

UILabel *descriptionLabel = [[UILabel alloc] initWithFrame:CGRectMake(90, 0, 200, 30)];

descriptionLabel.font = [UIFont systemFontOfSize:14.0];
descriptionLabel.minimumFontSize = 10.0;
descriptionLabel.adjustsFontSizeToFitWidth = YES;
descriptionLabel.numberOfLines = 1;
descriptionLabel.text = @"supercalifragilisticexpialidocious even thought he sound of it is something quite attrocious";

Solution 2

To resize the text in a multi-line UILabel, you can use this helper method (based on code from 11 Pixel Studios):

+ (void)resizeFontForLabel:(UILabel*)aLabel maxSize:(int)maxSize minSize:(int)minSize { 
 // use font from provided label so we don't lose color, style, etc
 UIFont *font = aLabel.font;

 // start with maxSize and keep reducing until it doesn't clip
 for(int i = maxSize; i >= minSize; i--) {
  font = [font fontWithSize:i];
  CGSize constraintSize = CGSizeMake(aLabel.frame.size.width, MAXFLOAT);

  // This step checks how tall the label would be with the desired font.
  CGSize labelSize = [aLabel.text sizeWithFont:font constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
  if(labelSize.height <= aLabel.frame.size.height)
   break;
 }
 // Set the UILabel's font to the newly adjusted font.
 aLabel.font = font;
}

Solution 3

Set the adjustsFontSizeToFitWidth property to YES.

Share:
25,796
Sheehan Alam
Author by

Sheehan Alam

iOS, Android and Mac Developer. i can divide by zero.

Updated on July 09, 2022

Comments

  • Sheehan Alam
    Sheehan Alam almost 2 years

    If a UILabel contains too much text, how can I setup my label so that it shrinks font-sizes?

    Here is how I am setting up my UILabel:

         descriptionLabel = [[UILabel alloc] initWithFrame:CGRectMake(200, 30, 130, 150)];
        [descriptionLabel setFont:[Utils getSystemFontWithSize:14]];
        [descriptionLabel setBackgroundColor:[UIColor clearColor]];
        [descriptionLabel setTextColor:[UIColor whiteColor]];
        descriptionLabel.numberOfLines = 1;
        [self addSubview:descriptionLabel];
    
  • Sheehan Alam
    Sheehan Alam about 14 years
    I have added those line but it doesn't seem to work. Even when I specify my rect to be something small like CGRectMake(200,30,10,10) nothing happens.
  • prendio2
    prendio2 about 14 years
    I'm not sure what exactly your [Utils getSystemFontWithSize:] is returning… I'm editing my answer to include an example I've just tested and verified.
  • Christopher Pickslay
    Christopher Pickslay almost 13 years
    In your for loop, the condition should be i >= minSize, not i > 10
  • Jonathan
    Jonathan over 11 years
    Or just set the number of lines to 0.
  • Joshua Gross
    Joshua Gross over 10 years
    As of iOS 6, you should now be using setMinimumScaleFactor instead of minimumFontSize.
  • Supertecnoboff
    Supertecnoboff over 9 years
    Thanks so much. That has just saved me so work and time. @prendio2