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 已弃用的主要内容,如果未能解决你的问题,请参考以下文章