user2023660
user2023660

Reputation: 1

deprecated ’sizeWithFont:constrainedToSize:' replacement

Somebody knows how to use -boundingRectWithSize:options:attributes:context: as a replacement of the deprecated ”sizeWithFont:constrainedToSize:” method in this case.

CGSize labelSize = [self.mainLabel.text sizeWithFont:self.mainLabel.font constrainedToSize:CGSizeMake(CGFLOAT_MAX, CGRectGetHeight(self.bounds))];

Gets the warning: 'sizeWithFont:constrainedToSize:' is deprecated: first deprecated in iOS 7.0 - Use -boundingRectWithSize:options:attributes:context:

This is the hole code piece:

 // calculate the label size

CGSize labelSize = [self.mainLabel.text sizeWithFont:self.mainLabel.font constrainedToSize:CGSizeMake(CGFLOAT_MAX, CGRectGetHeight(self.bounds))];

each_object(self.labels, ^(UILabel *label) {
    CGRect frame = label.frame;
    frame.origin.x = offset;
    frame.size.height = CGRectGetHeight(self.bounds);
    frame.size.width = labelSize.width + 2.f /*Magic number*/;
    label.frame = frame;


    // Recenter label vertically within the scroll view
    label.center = CGPointMake(label.center.x, roundf(self.center.y - CGRectGetMinY(self.frame)));

    offset += CGRectGetWidth(label.bounds) + self.labelSpacing;
});

Upvotes: 0

Views: 1138

Answers (2)

nerowolfe
nerowolfe

Reputation: 4817

For example this way

-(CGFloat)getLabelSize:(UILabel *)label fontSize:(NSInteger)fontSize
{


   NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                                      [UIFont systemFontOfSize:fontSize], NSFontAttributeName,
                                      nil];

   CGRect frame = [label.text boundingRectWithSize:CGSizeMake(270, 2000.0)
                                        options:NSStringDrawingUsesLineFragmentOrigin
                                     attributes:attributesDictionary
                                        context:nil];

   CGSize size = frame.size;

   return size.height;
}

Upvotes: 0

Fogmeister
Fogmeister

Reputation: 77631

At the moment you have...

CGSize labelSize = [self.mainLabel.text sizeWithFont:self.mainLabel.font constrainedToSize:CGSizeMake(CGFLOAT_MAX, CGRectGetHeight(self.bounds))];

So use...

CGRect boundingRect = [self.mainLabel.text boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, CGRectGetHeight(self.bounds))
                                                        options:NSStringDrawingUsesLineFragmentOrigin
                                                        context:nil];

CGSize labelSize = boundingRect.size;

That should work.

Or... with attributes...

CGRect boundingRect = [self.mainLabel.text boundingRectWithSize:CGSizeMake(CGFLOAT_MAX, CGRectGetHeight(self.bounds))
                                                        options:NSStringDrawingUsesLineFragmentOrigin 
                                                     attributes:@{NSFontAttributeName:self.mainLabel.font} 
                                                        context:nil];

Upvotes: 2

Related Questions