sizeWithFont:constrainedToSize:lineBreakMode 已弃用

Posted

技术标签:

【中文标题】sizeWithFont:constrainedToSize:lineBreakMode 已弃用【英文标题】:sizeWithFont:constrainedToSize:lineBreakMode deprecated 【发布时间】:2013-09-07 12:13:45 【问题描述】:

我有以下代码:

float height = [string sizeWithFont:[UIFont systemFontOfSize:kFontSize] constrainedToSize:CGSizeMake(widthOfTextView, 999999.0f) lineBreakMode:NSLineBreakByWordWrapping].height + verticalPadding;

但是,每当我运行我的应用程序并收到警告,告诉我这已被弃用。我应该使用什么以及如何将它与我当前的代码一起使用?

谢谢!

【问题讨论】:

【参考方案1】:

sizeWithFont:ConstrainedToSize:lineBreakMode 自 ios 7 起已弃用,因此我也一直在寻找替代品。到目前为止,这似乎是我找到的最佳答案:

https://***.com/a/18746573/1275947

【讨论】:

【参考方案2】:

这被 [string boundingRectWithSize:options:attributes:context] 取代。 “技巧”是创建一个包含您之前使用的字体和换行模式的属性字典。在你的情况下,应该是:

// Create a paragraph style with the desired line break mode
NSMutableParagraphStyle *paragraphStyle = [[[NSMutableParagraphStyle alloc] init] autorelease];
paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;

// Create the attributes dictionary with the font and paragraph style
NSDictionary *attributes = @
                               NSFontAttributeName:detailTextFont,
                               NSParagraphStyleAttributeName:paragraphStyle
                           ;

// Call boundingRectWithSize:options:attributes:context for the string 
CGRect textRect = [string boundingRectWithSize:CGSizeMake(widthOfTextView, 999999.0f)
                                       options:NSStringDrawingUsesLineFragmentOrigin
                                    attributes:attributes
                                       context:nil];

float height = textRect.size.height;

如果你去掉段落样式,你会得到默认的 NSLineBreakByWordWrapping。

【讨论】:

感谢您发布此内容,但是伙计,这不仅仅是 CGSize stringSize = [strToSize sizeWithFont:font constrainedToSize:CGSizeMake(300, 40) lineBreakMode:NSLineBreakByWordWrapping]; 这就是我发布它的原因!很高兴它有帮助。【参考方案3】:

实际上,您不需要过多地逃避最近已弃用的代码。正如它所说,有一个更好的替代品,但你应该注意只有 iOS7 可以使用它。市场通常要求我们至少向后定位一个主要版本......此外,一些 API 来来去去,您可以等待下一个主要版本,看看时间是否证明更新您的代码库的好处。

【讨论】:

【参考方案4】:

它在docs 中告诉您。

它说该方法已弃用,然后告诉您应该使用什么来代替它。

您应该使用:boundingRectWithSize:options:attributes:context:

【讨论】:

以上是关于sizeWithFont:constrainedToSize:lineBreakMode 已弃用的主要内容,如果未能解决你的问题,请参考以下文章