sizeWithFont: ConstrainedToSize: lineBreakMode: 方法在 iOS 7 中已弃用

Posted

技术标签:

【中文标题】sizeWithFont: ConstrainedToSize: lineBreakMode: 方法在 iOS 7 中已弃用【英文标题】:sizeWithFont: ConstrainedToSize: lineBreakMode: method is deprecated in iOS 7 【发布时间】:2014-02-09 02:57:53 【问题描述】:

,我有点不确定如何准确处理。上网查了一下,发现有一种新的处理方法,就是:

[txt drawWithRect: options: attributes: context:]

这是我当前尝试运行的方法:

+ (CGSize)textSizeForText:(NSString *)txt

    CGFloat width = [UIScreen mainScreen].applicationFrame.size.width * 0.75f;
    CGFloat height = MAX([JSBubbleView numberOfLinesForMessage:txt],
                         [txt numberOfLines]) * [JSMessageInputView textViewLineHeight];


    return [txt sizeWithFont:[JSBubbleView font]
           constrainedToSize:CGSizeMake(width - kJSAvatarSize, height + kJSAvatarSize)
               lineBreakMode:NSLineBreakByWordWrapping];


但我很难将其转换为新方法。主要是 lineBreakMode: 在新方法中没有。有任何想法吗?

【问题讨论】:

deprecated in ios 7 " sizeWithFont: constrainedToSize: lineBreakMode: " how can I replacement?的可能重复 【参考方案1】:

在新方法中,对于换行,你必须先创建一个 NSMutableParagraphStyle 样式:

  NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; 
  paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; 

然后通过传递所有必要的参数来简单地使用新方法

  CGRect textRect = [text boundingRectWithSize:CGSizeMake(width - kJSAvatarSize, height + kJSAvatarSize)
                                      options:NSStringDrawingUsesLineFragmentOrigin
                                   attributes:@NSParagraphStyleAttributeName: paragraphStyle.copy
                                      context:nil];

  return textRect.size;

如果你想让这成为潮流,你可以这样做

  return ([text boundingRectWithSize:CGSizeMake(width - kJSAvatarSize, height + kJSAvatarSize)
                                      options:NSStringDrawingUsesLineFragmentOrigin
                                   attributes:@NSParagraphStyleAttributeName: paragraphStyle.copy
                                      context:nil]).size;

希望有帮助

我将在上面的答案中添加字体属性

return ([text boundingRectWithSize:CGSizeMake(width - kJSAvatarSize, height + kJSAvatarSize)
                                      options:NSStringDrawingUsesLineFragmentOrigin
                                   attributes:@NSParagraphStyleAttributeName: paragraphStyle.copy, NSFontAttributeName:[UIFont fontWithName:@"HelveticaNeue" size:14]
                                      context:nil]).size;

【讨论】:

嘿,谢谢你的回答,我将在 lineBreakMode 的同时添加字体属性 段落样式到底是什么?弃用的代码中没有那个变量,那么,它应该有什么值呢?

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

sizeWithFont 返回随机值

sizeWithFont:constrainedToSize:lineBreakMode 已弃用

sizeWithFont:constrainedToSize 不适用于自定义字体

多线程崩溃中的 sizeWithFont!

Emojis弄乱了obj-c的sizeWithFont数学

python 笔记 size-constrained-clustering (对类别大小做限制的聚类问题)