CATextlayer change size of FONT to fit the frame

Swissdude picture Swissdude · Jun 16, 2012 · Viewed 8.5k times · Source

I have a CATextlayer of a certain size and NSAttributedString text of unknown length.

I need to adjust the font-size so the text fits the frame (not vice versa :)

Any ideas where to start? :)

[Edit] as nall points out, I can determine the string length, of course, it's some text entered by the user that I need to fit into a box of fixed size.

Answer

Ricardo Ruiz Romero picture Ricardo Ruiz Romero · Jun 9, 2013

I achieved it by doing this:

    float fontSize = InitialFontSize;
    UIFont *myFont = [UIFont boldSystemFontOfSize:fontSize];
    CGSize myFontSize = [YourTextHere sizeWithFont:myFont];
    while (myFontSize.width >= MaximunWidth) {
        fontSize -= 0.1f;
        myFont = [UIFont boldSystemFontOfSize:fontSize];
        myFontSize = [YourTextHere sizeWithFont:myFont];
    }
    CATextLayer *textLayer = [CATextLayer layer];
    [textLayer setFrame:CGRectMake(MaximunWidth - myFontSize.width / 2, MaximunHeight - myFontSize.height / 2, myFontSize.width, myFontSize.height)];
    [textLayer setFontSize:fontSize];
    [textLayer setString:YourTextHere];

    [textLayer setAlignmentMode:kCAAlignmentCenter];