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

我有以下代码:

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

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

谢谢!

【问题讨论】:

    标签: iphone ios objective-c


    【解决方案1】:

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

    https://stackoverflow.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:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-12
          • 1970-01-01
          相关资源
          最近更新 更多