如何使用drawInRect:withAttributes:而不是drawAtPoint:forWidth:withFont:fontSize:lineBreakMode:baselineAdjustment:in iOS 7
iOS 7.0中不推荐使用此方法:
drawAtPoint:forWidth:withFont:fontSize:lineBreakMode:baselineAdjustment:
现在使用drawInRect:withAttributes:
来代替。
我无法findfontSize和baselineAdjustment的attributeName。
编辑
感谢@Puneet的答案。
其实我是说如果没有这些键,如何在iOS 7中实现这个方法呢?
像下面的方法:
+ (CGSize)drawWithString:(NSString *)string atPoint:(CGPoint)point forWidth:(CGFloat)width withFont:(UIFont *)font fontSize:(CGFloat)fontSize lineBreakMode:(IBLLineBreakMode)lineBreakMode baselineAdjustment:(UIBaselineAdjustment)baselineAdjustment { if (iOS7) { CGRect rect = CGRectMake(point.x, point.y, width, CGFLOAT_MAX); NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; paragraphStyle.lineBreakMode = lineBreakMode; NSDictionary *attributes = @{NSFontAttributeName: font, NSParagraphStyleAttributeName: paragraphStyle}; [string drawInRect:rect withAttributes:attributes]; size = CGSizeZero; } else { size = [string drawAtPoint:point forWidth:width withFont:font fontSize:fontSize lineBreakMode:lineBreakMode baselineAdjustment:baselineAdjustment]; } return size; }
我不知道如何通过fontSize
和baselineAdjustment
attributes
字典。
例如
NSBaselineOffsetAttributeName
键应该传递一个NSNumer
,但是baselineAdjustment
是Enum
。
没有其他办法可以传递这两个variables吗?
你可以使用NSDictionary
并应用这样的属性:
NSFont *font = [NSFont fontWithName:@"Palatino-Roman" size:14.0]; NSDictionary *attrsDictionary = [NSDictionary dictionaryWithObjectsAndKeys: font, NSFontAttributeName, [NSNumber numberWithFloat:1.0], NSBaselineOffsetAttributeName, nil];
使用attrsDictionary
作为参数。
请参阅:“ 属性string编程指南”
请参阅: 标准属性
SWIFT: IN String drawInRect不可用,但我们可以使用NSString来代替:
let font = UIFont(name: "Palatino-Roman", size: 14.0) let baselineAdjust = 1.0 let attrsDictionary = [NSFontAttributeName:font, NSBaselineOffsetAttributeName:baselineAdjust] as [NSObject : AnyObject] let str:NSString = "Hello World" str.drawInRect(CGRectZero, withAttributes: attrsDictionary)
这是比以前更复杂一点,你不能使用最小的字体大小,但必须使用最小的字体比例因子。 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中似乎存在一个错误,至less到版本7.0.3:如果您在属性中指定自定义字体,则miniumScaleFactor将被忽略。 如果您通过零的属性,文本正确缩放。
-
NSStringDrawingUsesLineFragmentOrigin
选项很重要。 它告诉文本绘图系统,绘图矩形的原点应该在左上angular。 -
使用新方法无法设置基线调整。 你必须自己调用
boundingRectWithSize:options:attributes:context:
first,然后在将其传递给drawWithRect:options:attributes:context
之前调整矩形。