Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get NSTextField contents to scale

How can I have the text scale to fit the bounds I gave it?

like image 421
Matt S. Avatar asked May 25 '10 21:05

Matt S.


1 Answers

I've done something like this in the past.

-(void)calcFontSizeToFitRect:(NSRect)r {
    float targetWidth = r.size.width - xMargin;
    float targetHeight = r.size.height - yMargin;
    
    // the strategy is to start with a small font size and go larger until I'm larger than one of the target sizes
    int i;
    for (i=minFontSize; i<maxFontSize; i++) {
        NSDictionary* attrs = [[NSDictionary alloc] initWithObjectsAndKeys:[NSFont fontWithName:currentFontName size:i], NSFontAttributeName, nil];
        NSSize strSize = [stringValue sizeWithAttributes:attrs];
        [attrs release];
        if (strSize.width > targetWidth || strSize.height > targetHeight) break;
    }
    [self setCurrentFontSize:(i-1)];
}

The stringValue variable is the text you want sized. The xMargin and yMargin variables are for spacing that you want. The minFontSize and maxFontSize variables give limits to how small or large you want to go.

like image 87
regulus6633 Avatar answered Nov 04 '22 17:11

regulus6633