使用 boundingRectWithSize CGRectMake 修复弃用

Fixing deprecation with boundingRectWithSize CGRectMake

所以我正在尝试修复一些未解决的、IOS7 之前的弃用问题,这些问题涉及 sizeWithFont。我一直在关注此处提供的答案 '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;

但我收到错误:"Sending CGRect to parameter of incompatible type CGSize"。但是我需要所有四个属性......而不仅仅是宽度和高度。所以我 必须 使用 CGRect 而不是 CGSize。知道如何让它发挥作用吗?

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

NSAttributedString 上的方法将最大大小作为参数。你可以在 CGRect 上设置你想要的原点 returns.

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)