11

随着 iOS7 的发布,以下功能已被弃用:

drawAtPoint:forWidth:withFont:minFontSize:actualFontSize:lineBreakMode:baselineAdjustment:

在 Apple 的文档中,它建议使用

drawInRect:withAttributes:

我使用这个函数的原因是因为<code>minFontSize</code>参数,它可以让我在一个矩形内绘制一个字符串。

如果文本不适合,它将首先将文本大小缩小到<code>minFontSize</code>,然后如果不适合,它将截断它。

到目前为止,我无法使用<code>drawInRect:withAttributes:</code>.

我可以使用哪个键来确定<code>minFontSize</code>等效项?

4

4 回答 4

12

它比以前复杂一点,您不能使用最小字体大小,但必须使用最小字体比例因子。iOS SDK 中还有一个错误,它在大多数用例中都会破坏它(请参阅底部的注释)。这是你必须做的:

// Create text attributes
NSDictionary *textAttributes = @{NSFontAttributeName: [UIFont systemFontOfSize:18.0]};

// Create string drawing context
NSStringDrawingContext *drawingContext = [[NSStringDrawingContext alloc] init];
drawingContext.minimumScaleFactor = 0.5; // Half the font size

CGRect drawRect = CGRectMake(0.0, 0.0, 200.0, 100.0);
[string drawWithRect:drawRect
             options:NSStringDrawingUsesLineFragmentOrigin
          attributes:textAttributes
             context:drawingContext];

笔记:

  • iOS 7 SDK 至少到 7.0.3 版似乎存在一个错误:如果您在属性中指定自定义字体,则忽略 miniumScaleFactor。如果您为属性传递 nil,则文本将正确缩放。

  • NSStringDrawingUsesLineFragmentOrigin选项很重要。它告诉文本绘图系统,绘图矩形的原点应该在左上角。

  • 无法使用新方法设置baselineAdjustment。您必须自己执行此操作,方法是boundingRectWithSize:options:attributes:context:先调用然后调整 rect,然后再将其传递给drawWithRect:options:attributes:context.

于 2013-11-05T11:47:14.867 回答
1

谷歌搜索了很长时间后,我没有找到在 iOS7 下工作的解决方案。

现在我使用以下解决方法,知道它非常难看。

我在内存中渲染一个 UILabel,截屏并绘制它。

UILabel 能够正确缩小文本。

也许有人觉得它有用。

UILabel *myLabel = [[UILabel alloc] initWithFrame:myLabelFrame];
myLabel.font = [UIFont fontWithName:@"HelveticaNeue-BoldItalic" size:16];
myLabel.text = @"Some text that is too long";
myLabel.minimumScaleFactor = 0.5;
myLabel.adjustsFontSizeToFitWidth = YES;
myLabel.backgroundColor = [UIColor clearColor];

UIGraphicsBeginImageContextWithOptions(myLabelFrame.size, NO, 0.0f);
[[myLabel layer] renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

[screenshot drawInRect:myLabel.frame];
于 2014-02-09T22:11:44.827 回答
0

只需使用该键和属性创建一个 NS 字典,这样就可以了

NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys: @"15", @"minFontSize", @"value2", @"key2", nil];
//in key2 and value2 you could set any other of the attributes included in the first method
[yourString drawInRect:rect withAttributes:attributes];
于 2013-09-25T11:30:00.440 回答
0

我使用以下方法来解决我的问题。使用下面的代码,您可以在 X、Y 位置绘制、设置字体、字体大小和字体颜色。

[String drawAtPoint:CGPointMake(X, Y) withAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"Helvetica-Bold" size:18], NSForegroundColorAttributeName:[UIColor colorWithRed:199.0f/255.0f green:0.0f/255.0f blue :54.0f/255.0f 阿尔法:1.0f] }];

于 2017-07-18T12:14:50.660 回答