Vin*_*Sit 40 nsstring ios ios7
在iOS 7.0中不推荐使用此方法:
drawAtPoint:forWidth:withFont:fontSize:lineBreakMode:baselineAdjustment:
Run Code Online (Sandbox Code Playgroud)
现在drawInRect:withAttributes:改用.
我找不到fontSize和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;
}
Run Code Online (Sandbox Code Playgroud)
我不知道怎么打发fontSize,并baselineAdjustment以
attributes 字典.
例如
NSBaselineOffsetAttributeName关键要经过NSNumer它,但baselineAdjustment就是Enum.
是不是还有其他方法来传递这两个变量?
Pun*_*rma 38
您可以使用NSDictionary和应用这样的属性:
NSFont *font = [NSFont fontWithName:@"Palatino-Roman" size:14.0];
NSDictionary *attrsDictionary =
[NSDictionary dictionaryWithObjectsAndKeys:
font, NSFontAttributeName,
[NSNumber numberWithFloat:1.0], NSBaselineOffsetAttributeName, nil];
Run Code Online (Sandbox Code Playgroud)
使用attrsDictionary作为参数.
参考: 归因字符串编程指南
参考:标准属性
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)
Run Code Online (Sandbox Code Playgroud)
Flo*_*ian 34
它比以前复杂一点,你不能使用最小字体大小,但必须使用最小字体比例因子.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];
Run Code Online (Sandbox Code Playgroud)
笔记:
iOS 7 SDK中似乎存在至少版本7.0.3的错误:如果在属性中指定自定义字体,则忽略miniumScaleFactor.如果为属性传递nil,则正确缩放文本.
该NSStringDrawingUsesLineFragmentOrigin选项是非常重要的.它告诉文本绘图系统,绘图rect的原点应该在左上角.
无法使用新方法设置baselineAdjustment.您必须先通过boundingRectWithSize:options:attributes:context:先调用然后调整矩形然后再将其传递给自己drawWithRect:options:attributes:context.
| 归档时间: |
|
| 查看次数: |
35691 次 |
| 最近记录: |