使用 boundingRectWithSize CGRectMake 修复弃用
Posted
技术标签:
【中文标题】使用 boundingRectWithSize CGRectMake 修复弃用【英文标题】:Fixing deprecation with boundingRectWithSize CGRectMake 【发布时间】:2016-07-03 16:20:22 【问题描述】:因此,我正在尝试修复一些涉及 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】: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)
【讨论】:
他们必须想出一种方法来简化这个......不知何故,原来的 2 行代码现在变成了 10 行代码。我会在后端做一些事情以使其与被弃用之前一样高效(或更高效)。无论如何,您的答案有效。谢谢!以上是关于使用 boundingRectWithSize CGRectMake 修复弃用的主要内容,如果未能解决你的问题,请参考以下文章
使用 boundingRectWithSize CGRectMake 修复弃用
在 boundingRectWithSize:options:context: 中使用 NSStringDrawingUsesLineFragmentOrigin: 获得额外的空白空间
NSString boundingRectWithSize返回不必要的高度
为啥在 boundingRectWithSize 处崩溃此代码?