Dynamically changing font size of UILabel
Single line:
factLabel.numberOfLines = 1;factLabel.minimumFontSize = 8;factLabel.adjustsFontSizeToFitWidth = YES;
The above code will adjust your text's font size down to (for example) 8
trying to fit your text within the label. numberOfLines = 1
is mandatory.
Multiple lines:
For numberOfLines > 1
there is a method to figure out the size of final text through NSString's sizeWithFont:... UIKit addition methods, for example:
CGSize lLabelSize = [yourText sizeWithFont:factLabel.font forWidth:factLabel.frame.size.width lineBreakMode:factLabel.lineBreakMode];
After that you can just resize your label using resulting lLabelSize
, for example (assuming that you will change only label's height):
factLabel.frame = CGRectMake(factLabel.frame.origin.x, factLabel.frame.origin.y, factLabel.frame.size.width, lLabelSize.height);
iOS6
Single line:
Starting with iOS6, minimumFontSize
has been deprecated. The line
factLabel.minimumFontSize = 8.;
can be changed to:
factLabel.minimumScaleFactor = 8./factLabel.font.pointSize;
iOS7
Multiple lines:
Starting with iOS7, sizeWithFont
becomes deprecated. Multiline case is reduced to:
factLabel.numberOfLines = 0;factLabel.lineBreakMode = NSLineBreakByWordWrapping;CGSize maximumLabelSize = CGSizeMake(factLabel.frame.size.width, CGFLOAT_MAX);CGSize expectSize = [factLabel sizeThatFits:maximumLabelSize];factLabel.frame = CGRectMake(factLabel.frame.origin.x, factLabel.frame.origin.y, expectSize.width, expectSize.height);
iOS 13 (Swift 5):
label.adjustsFontSizeToFitWidth = truelabel.minimumScaleFactor = 0.5
minimumFontSize
has been deprecated with iOS 6. You can use minimumScaleFactor
.
yourLabel.adjustsFontSizeToFitWidth=YES;yourLabel.minimumScaleFactor=0.5;
This will take care of your font size according width of label and text.
Single line- There are two ways, you can simply change.
1- Pragmatically (Swift 3)
Just add the following code
yourLabel.numberOfLines = 1; yourLabel.minimumScaleFactor = 0.7; yourLabel.adjustsFontSizeToFitWidth = true;
2 - Using UILabel Attributes inspector
i- Select your label- Set number of lines 1.ii- Autoshrink- Select Minimum Font Scale from drop downiii- Set Minimum Font Scale value as you wish , I have set 0.7 as in below image. (default is 0.5)