【发布时间】:2015-06-18 13:46:29
【问题描述】:
我有一个旧项目,代码使用 sizeWithFont。我从 xcode 收到警告说它在 iOS 7 中首先被弃用,并要求我用
替换它(CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context
我有两个问题:
我。如果我不打算改变它,会发生什么?它会导致我的应用崩溃,还是只是绕过已弃用的 API?
二。我想使用建议的 API,但我很困惑它要求一个 CGSize 参数并返回一个 CGRect,而我的旧项目只需要返回一个 CGSize。如果我已经获得了 CGSize,为什么我还需要 rect 呢?请纠正我并使用新的 API 提供代码。非常感谢!
编辑:
我已经检查了Replacement for deprecated sizeWithFont: in iOS 7?的答案
我会做一个自我回答来比较两个解决方案。
我的另一个问题是:
我注意到有一个[self setNumberOfLines:1];,我应该保留它还是删除它?目前它不会影响我的代码中的任何内容,但我不知道其他情况,即“多行”情况。
旧代码:
@implementation UILabel (dynamicSize)
-(CGFloat)expectedWidth{
[self setNumberOfLines:1];
CGSize maximumLabelSize = CGSizeMake(9999,self.frame.size.height);
CGSize expectedLabelSize = [[self text] sizeWithFont:[self font]
constrainedToSize:maximumLabelSize
lineBreakMode:[self lineBreakMode]];
return expectedLabelSize.width;
}
@end
【问题讨论】:
-
对于您的第一个问题,在 Apple 删除旧代码之前,您的应用程序不会崩溃。短期内不会轻易发生的事情。对于
sizeWithFont:constrainedToSize:的使用,请参阅重复的问题。 -
谢谢,我正在看
-
@rckoenes 我用我挖掘出来的东西更新了我的问题。我想将其发布为答案,但您将其关闭。我们可以做些什么来突出我的发现?
-
@wingzeor 我重新打开了你的问题。
-
@rckoenes 谢谢,已更新。顺便说一句,我注意到有
[self setNumberOfLines:1];我应该保留它我可以删除它吗?