objective-cnsstringdrawrectsizewithfont

NSString font size specific to frame width


I am using drawRect for a text display, calling NSString. I am trying to implement using sizeWithFont to auto resizing font (shrinking) with default font size of 17 and using a loop to reduce the font size by 1 if it does not fit the size of width. Can anyone help me how to implement this? Example would be nice right now I just have the font size set to 17.0

[[self.string displayName] drawAtPoint:CGPointMake(xcoord, ycoord) withFont:[UIFont boldSystemFontOfSize:17.0]];
CGSize size = [[self.patient displayName] sizeWithFont:[UIFont boldSystemFontOfSize:17.0]];
max_current_y = size.height > max_current_y ? size.height : max_current_y;
xcoord = xcoord + 3.0f + size.width;

Solution

  • OK never mind. Here's modified version of the same method that takes NSString for which to return a font:

        -(UIFont*)getFontForString:(NSString*)string
                   toFitInRect:(CGRect)rect
                      seedFont:(UIFont*)seedFont{
        UIFont* returnFont = seedFont;
        CGSize stringSize = [string sizeWithAttributes:@{NSFontAttributeName : seedFont}];
    
        while(stringSize.width > rect.size.width){
            returnFont = [UIFont systemFontOfSize:returnFont.pointSize -1];
            stringSize = [string sizeWithAttributes:@{NSFontAttributeName : returnFont}];
        }
    
        return returnFont;
    }
    

    Here's how to call it:

    NSString* stringToDraw = @"Test 123";
    
        CGRect rect = CGRectMake(100., 100., 100., 200.);
        UIFont* font = [self getFontForString:stringToDraw toFitInRect:rect seedFont:[UIFont systemFontOfSize:20]];
        [stringToDraw drawInRect:rect withFont:font];
    

    Code is for iOS7+