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.
Author by
Sheehan Alam
iOS, Android and Mac Developer. i can divide by zero.
Updated on July 09, 2022Comments
-
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 about 14 yearsI 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 about 14 yearsI'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 almost 13 yearsIn your for loop, the condition should be
i >= minSize
, noti > 10
-
Jonathan over 11 yearsOr just set the number of lines to 0.
-
Joshua Gross over 10 yearsAs of iOS 6, you should now be using
setMinimumScaleFactor
instead ofminimumFontSize
. -
Supertecnoboff over 9 yearsThanks so much. That has just saved me so work and time. @prendio2