Skip to content
Create a gist now

Instantly share code, notes, and snippets.

Making UILabel's adjustsFontSizeToFitWidth and minimumFontSize play nice with multi-lined labels
@interface NSString (KBAdditions)
- (CGFloat)fontSizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size minimumFontSize:(CGFloat)minimumFontSize;
#import "NSString+KBAdditions.h"
@implementation NSString (KBAdditions)
// Original code from
- (CGFloat)fontSizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size minimumFontSize:(CGFloat)minimumFontSize {
CGFloat fontSize = [font pointSize];
CGFloat height = [self sizeWithFont:font constrainedToSize:CGSizeMake(size.width,FLT_MAX) lineBreakMode:UILineBreakModeWordWrap].height;
UIFont *newFont = font;
//Reduce font size while too large, break if no height (empty string)
while (height > size.height && height != 0 && fontSize > minimumFontSize) {
newFont = [UIFont fontWithName:font.fontName size:fontSize];
height = [self sizeWithFont:newFont constrainedToSize:CGSizeMake(size.width,FLT_MAX) lineBreakMode:UILineBreakModeWordWrap].height;
// Loop through words in string and resize to fit
for (NSString *word in [self componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]) {
CGFloat width = [word sizeWithFont:newFont].width;
while (width > size.width && width != 0 && fontSize > minimumFontSize) {
newFont = [UIFont fontWithName:font.fontName size:fontSize];
width = [word sizeWithFont:newFont].width;
return fontSize;
@interface UILabel (KBAdditions)
- (void)sizeToFitMultipleLines;
#import "UILabel+KBAdditions.h"
#import "NSString+KBAdditions.h"
@implementation UILabel (KBAdditions)
- (void)sizeToFitMultipleLines {
if (self.adjustsFontSizeToFitWidth) {
CGFloat adjustedFontSize = [self.text fontSizeWithFont:self.font constrainedToSize:self.frame.size minimumFontSize:self.minimumFontSize];
self.font = [self.font fontWithSize:adjustedFontSize];
[self sizeToFit];
mkubenka commented Jul 9, 2014

Fork removing deprecated warnings on iOS7.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.