使用boundingRectWithSize CGRectMake修复弃用

时间:2016-07-03 16:20:22

标签: ios objective-c cgrect

所以我试图修复一些涉及sizeWithFont的优秀的IOS7之前的弃用。我一直在关注此处提供的答案'sizeWithFont:constrainedToSize:lineBreakMode:'is deprecated:

..主要是处理CGSize和CGSizeMake。但是我的问题与CGRectMake有关,而且我还没有能够按照我想要的方式将它整合在一起。

这是原始代码:

CGSize optimumSize = [percentageText sizeWithFont:self.percentageFont constrainedToSize:CGSizeMake(max_text_width,100)];
CGRect percFrame = CGRectMake(text_x, right_label_y, optimumSize.width, optimumSize.height);

以下是我尝试过的事情:

NSString *percentageText = [NSString stringWithFormat:@"%.1f%%", component.value/total*100];
                NSAttributedString *attributedText =
                [[NSAttributedString alloc]
                 initWithString:percentageText
                 attributes:@
                 {
                 NSFontAttributeName: self.percentageFont
                 }];
                CGRect percFrame = [attributedText boundingRectWithSize:(CGRectMake(text_x, right_label_y, max_text_width,100))
                                                                options:NSStringDrawingUsesLineFragmentOrigin
                                                                context:nil];

                CGSize optimumSize = percFrame.size;

但我收到错误:"将CGRect发送到不兼容类型CGSize"的参数。但是我需要所有四个属性......而不仅仅是宽度和高度。所以我使用CGRect而不是CGSize。知道我怎么能让它发挥作用吗?

否则我使用CGSize的所有其他代码都可以正常工作。我只有两段真正需要CGRect的代码。

1 个答案:

答案 0 :(得分:0)

NSAttributedString上的方法采用最大大小作为参数。您可以在它返回的CGRect上设置所需的原点。

NSString *percentageText = [NSString stringWithFormat:@"%.1f%%", component.value/total*100];
            NSAttributedString *attributedText =
            [[NSAttributedString alloc]
             initWithString:percentageText
             attributes:@
             {
             NSFontAttributeName: self.percentageFont
             }];
            CGRect percFrame = [attributedText boundingRectWithSize:(CGSizeMake(max_text_width,100))
                                                            options:NSStringDrawingUsesLineFragmentOrigin
                                                            context:nil];
            percFrame.origin = CGPointMake(text_x, right_label_y)