Ios – Getting uilabel height for bold attributed text

iosobjective cuifontuilabel

My code to calculate height required to for label is as follows:

 -(float)frameForText:(NSString*)text sizeWithFont:(UIFont*)font constrainedToSize:     (float)width{
       NSDictionary *attributesDictionary = [NSDictionary   dictionaryWithObjectsAndKeys:font, NSFontAttributeName, nil];
       CGRect frame = [text boundingRectWithSize:(CGSize){width, CGFLOAT_MAX} options:      (NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading) attributes:attributesDictionary
                                  context:nil];
      // This contains both height and width, but we really care about height.
       return frame.size.height;

  }

I have called it as follows from below code to calculate height firs then used it to draw label

    //form attributed title
    NSString *str_title =@"This is sample title to calculate height";
    NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
    [paragraphStyle setLineSpacing: 2.0f];
    NSDictionary *attributes = @{ NSFontAttributeName: [UIFont fontWithName:@"PTSans-Bold" size:10], NSParagraphStyleAttributeName: paragraphStyle };
    NSAttributedString *attributed_title = [[NSAttributedString alloc] initWithString:str_title attributes:attributes];
    //calculate height required for title
    float comment_height = [self frameForText:str_title sizeWithFont:[UIFont fontWithName:@"PTSans-Bold" size:10] constrainedToSize:250];

    UILabel *lbl_title;
    //use calculated height here
    lbl_title = [[UILabel alloc] initWithFrame:CGRectMake(60, 5, 250, title_height)];
    lbl_title.numberOfLines = 0;
    lbl_title.attributedText = attributed_title;

This works fine when font is "PTSans-Regular" and gives exact uilabel height. But, it is not working for "PTSans-Bold" by above code.

How should I return exact UIlabel needed to write "PTSans-Bold" text with label of width 250, font's size 10 and paragraph line spacing equal to 2? Note: the "PTSans-Bold" is not system font, it's font I have added.

Thanks.

Best Answer

This is easyiest way to find UILabel text height dynamically height for below iOS7

CGSize fontSize = [uilabel.text sizeWithFont:uilabel.font];
NSLog(@"height %f",fontSize.height);

for iOS7

float heightIs =[uilabel.text boundingRectWithSize:uilabel.frame.size options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:uilabel.font } context:nil].size.height;