Replacement for deprecated -sizeWithFont:constrainedToSize:lineBreakMode: in iOS 7? Replacement for deprecated -sizeWithFont:constrainedToSize:lineBreakMode: in iOS 7? ios ios

Replacement for deprecated -sizeWithFont:constrainedToSize:lineBreakMode: in iOS 7?


You could try this:

CGRect textRect = [text boundingRectWithSize:size                                 options:NSStringDrawingUsesLineFragmentOrigin                              attributes:@{NSFontAttributeName:FONT}                                 context:nil];CGSize size = textRect.size;

Just change "FONT" for an "[UIFont font....]"


As we cant use sizeWithAttributes for all iOS greater than 4.3 we have to write conditional code for 7.0 and previous iOS.

1) Solution 1:

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {   CGSize size = CGSizeMake(230,9999);   CGRect textRect = [specialityObj.name         boundingRectWithSize:size                    options:NSStringDrawingUsesLineFragmentOrigin                 attributes:@{NSFontAttributeName:[UIFont fontWithName:[AppHandlers zHandler].fontName size:14]}                    context:nil];   total_height = total_height + textRect.size.height;   }else {   CGSize maximumLabelSize = CGSizeMake(230,9999);    expectedLabelSize = [specialityObj.name sizeWithFont:[UIFont fontWithName:[AppHandlers zHandler].fontName size:14] constrainedToSize:maximumLabelSize lineBreakMode:UILineBreakModeWordWrap]; //iOS 6 and previous.    total_height = total_height + expectedLabelSize.height;}

2) Solution 2

UILabel *gettingSizeLabel = [[UILabel alloc] init];gettingSizeLabel.font = [UIFont fontWithName:[AppHandlers zHandler].fontName size:16]; // Your Font-style whatever you want to use.gettingSizeLabel.text = @"YOUR TEXT HERE";gettingSizeLabel.numberOfLines = 0;CGSize maximumLabelSize = CGSizeMake(310, 9999); // this width will be as per your requirementCGSize expectedSize = [gettingSizeLabel sizeThatFits:maximumLabelSize];

The first solution is sometime fail to return proper value of height. so use another solution. which will work perfectly.

The second option is quite well and working smoothly in all iOS without conditional code.


Here is simple solution :

Requirements :

CGSize maximumSize = CGSizeMake(widthHere, MAXFLOAT);UIFont *font = [UIFont systemFontOfSize:sizeHere];

Now As constrainedToSizeusage:lineBreakMode: usage is deprecated in iOS 7.0:

CGSize expectedSize = [stringHere sizeWithFont:font constrainedToSize:maximumSize lineBreakMode:NSLineBreakByWordWrapping];

Now usage in greater version of iOS 7.0 will be:

// Let's make an NSAttributedString firstNSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:stringHere];//Add LineBreakModeNSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new];[paragraphStyle setLineBreakMode:NSLineBreakByWordWrapping];[attributedString setAttributes:@{NSParagraphStyleAttributeName:paragraphStyle} range:NSMakeRange(0, attributedString.length)];// Add Font[attributedString setAttributes:@{NSFontAttributeName:font} range:NSMakeRange(0, attributedString.length)];//Now let's make the Bounding RectCGSize expectedSize = [attributedString boundingRectWithSize:maximumSize options:NSStringDrawingUsesLineFragmentOrigin context:nil].size;