iOS 7 sizeWithAttributes:替换sizeWithFont:constrainedToSize

mor*_*utt 132 objective-c ios7

如何从新的iOS 7方法sizeWithAttributes返回多行文本CGSize?

我希望这能产生与sizeWithFont:constrainedToSize相同的结果.

NSString *text = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus eu urna quis lacus imperdiet scelerisque a nec neque. Mauris eget feugiat augue, vitae porttitor mi. Curabitur vitae sollicitudin augue. Donec id sapien eros. Proin consequat tellus in vehicula sagittis. Morbi sed felis a nibh hendrerit hendrerit. Lorem ipsum dolor sit."

CGSize textSize = [text sizeWithAttributes:@{ NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Light" size:16.0] }];
Run Code Online (Sandbox Code Playgroud)

此方法仅生成单行文本的高度.

eli*_*o.d 289

你可以尝试这个:

NSDictionary *attributes = @{NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:14]};
// NSString class method: boundingRectWithSize:options:attributes:context is
// available only on ios7.0 sdk.
CGRect rect = [textToMeasure boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX)
                                          options:NSStringDrawingUsesLineFragmentOrigin
                                       attributes:attributes
                                          context:nil];
Run Code Online (Sandbox Code Playgroud)

  • objective-c literals http://clang.llvm.org/docs/ObjectiveCLiterals.html (21认同)
  • 哇.比不推荐使用的原始`sizeWithFont:constrainedToSize:`方法更加迟钝.Apple必须真的讨厌我们.在任何情况下,+ 1. (20认同)
  • Swift版本:```var size = textToMeasure.boundingRectWithSize(CGSizeMake(width,CGFloat.max),options:NSStringDrawingOptions.UsesLineFragmentOrigin,attributes:attrs,context:nil).size``` (19认同)
  • 我第一次看到字典`@ {...}`的符号.这叫什么? (4认同)
  • 兄弟,我几乎失去了对SO的信仰,然后我来到这里. (4认同)

小智 22

我就这样做了:

    // Get a font to draw it in
UIFont *font = [UIFont boldSystemFontOfSize: 28];

CGRect textRect;
NSDictionary *attributes = @{NSFontAttributeName: font};

// How big is this string when drawn in this font?
textRect.size = [text sizeWithAttributes:attributes];

// Draw the string
[text drawInRect:textRect withAttributes:attributes];
Run Code Online (Sandbox Code Playgroud)

  • 如果长字符串应该在行尾打破,这将不起作用.请参阅elio.d的答案,这是正确的. (2认同)