【问题标题】:How to fix 'sizeWithFont:constrainedToSize:lineBreakMode:' is deprecated: warning [duplicate]如何修复 'sizeWithFont:constrainedToSize:lineBreakMode:' 已弃用:警告 [重复]
【发布时间】:2016-04-27 13:02:46
【问题描述】:

我的代码是

CGSize textSize =  [text sizeWithFont:font constrainedToSize:CGSizeMake(self.bounds.size.width - 106, CGFLOAT_MAX) lineBreakMode:NSLineBreakByWordWrapping];

有人知道我该如何解决这个警告吗?

【问题讨论】:

  • 可能是这个作品NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; CGRect textRect = [strText boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font,NSParagraphStyleAttributeName: paragraphStyle.copy} context:nil];
  • 我不熟悉objective-c,我在swift项目中使用的库中有这个警告。试图修复
  • 如果你不熟悉 ObjectiveC 代码。使用objectivec2swift.com/#/converter/code。它将 ObjC 转换为 swift

标签: ios objective-c deprecation-warning


【解决方案1】:

斯威夫特

 // adjust the label height (top align text)
// old
var labelSize: CGSize = model.name.sizeWithFont(self.nameLabel.font,  constrainedToSize: maxNameLabelSize, lineBreakMode: self.nameLabel.lineBreakMode)
// new
var labelSize: CGSize = model.name.boundingRectWithSize(maxNameLabelSize, options: .UsesLineFragmentOrigin, attributes: [NSFontAttributeName: self.nameLabel.font], context: nil).size

目标c

 // adjust the label height (top align text)
 // old
CGSize labelSize = [model.name sizeWithFont:self.nameLabel.font
                      constrainedToSize:_maxNameLabelSize
                          lineBreakMode:self.nameLabel.lineBreakMode];
 // new
CGSize labelSize = [model.name boundingRectWithSize:_maxNameLabelSize
                                        options:NSStringDrawingUsesLineFragmentOrigin
                                     attributes:@{NSFontAttributeName: self.nameLabel.font}
                                        context:nil].size;

【讨论】:

  • 与 linebreakmode 无关。按原样使用 lineBreakMode:NSLineBreakByWordWrapping
【解决方案2】:

试试下面的代码:

 NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:@"This is long text..!!!" attributes:@{NSFontAttributeName: self.lbl.font
 }];
CGRect rect = [attributedText boundingRectWithSize:(CGSize){self.lbl.frame.size.width, CGFLOAT_MAX}
                                           options:NSStringDrawingUsesLineFragmentOrigin
                                           context:nil];

NSLog(@"Height %f",rect.size.height);
NSLog(@"Width %f",rect.size.width);

【讨论】:

    【解决方案3】:

    使用这个:

    CGRect textRect = [text boundingRectWithSize:CGSizeMake(self.bounds.size.width - 106, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin
                                  attributes:@{NSFontAttributeName:[[UIFont fontWithName:@"YOUR_FONT_NAME" size:12.0f]]}
                                     context:nil];
    
    CGSize size = textRect.size;
    

    【讨论】:

      猜你喜欢
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 2022-07-29
      • 1970-01-01
      • 2019-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多