ios nsstring ios7

Cómo usar drawInRect: withAttributes: en lugar de drawAtPoint: forWidth: withFont: fontSize: lineBreakMode: baselineAdjustment: en iOS 7



nsstring ios7 (2)

Este método está en desuso en iOS 7.0:

drawAtPoint:forWidth:withFont:fontSize:lineBreakMode:baselineAdjustment:

Ahora use drawInRect:withAttributes: lugar.

No puedo encontrar el attributeName de fontSize y baselineAdjustment.

Editar

Gracias @Puneet respuesta.

En realidad, quiero decir si no tiene estas claves, ¿cómo implementar este método en iOS 7?

Me gusta el siguiente método:

+ (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; }

No sé cómo pasar fontSize y baselineAdjustment a

diccionario de attributes .

p.ej

NSBaselineOffsetAttributeName clave NSBaselineOffsetAttributeName debería pasarle un NSNumer , pero baselineAdjustment es Enum .

¿No hay otra manera de pasar las dos variables?


Es un poco más complicado que antes y no puede usar un tamaño de fuente mínimo, pero tiene que usar un factor de escala de fuente mínimo. También hay un error en el SDK de iOS, que lo rompe en la mayoría de los casos de uso (ver notas en la parte inferior). Esto es lo que tienes que hacer:

// 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];

Notas:

  • Parece que hay un error en el SDK de iOS 7 al menos hasta la versión 7.0.3: si especifica una fuente personalizada en los atributos, se ignora miniumScaleFactor. Si pasa nil para los atributos, el texto se escala correctamente.

  • La opción NSStringDrawingUsesLineFragmentOrigin es importante. Le dice al sistema de dibujo de texto que el origen del dibujo debe estar en la esquina superior izquierda.

  • No hay forma de establecer el ajuste de línea de base con el nuevo método. Tendría que hacer eso usted mismo al llamar a boundingRectWithSize:options:attributes:context: first y luego ajustar el rect antes de pasarlo a drawWithRect:options:attributes:context .


Puede usar NSDictionary y aplicar atributos como este:

NSFont *font = [NSFont fontWithName:@"Palatino-Roman" size:14.0]; NSDictionary *attrsDictionary = [NSDictionary dictionaryWithObjectsAndKeys: font, NSFontAttributeName, [NSNumber numberWithFloat:1.0], NSBaselineOffsetAttributeName, nil];

Usa attrsDictionary como argumento.

Consulte: Guía de programación de cadenas atribuidas

Consulte: Atributos estándar

SWIFT: IN String drawInRect no está disponible, pero podemos usar NSString en su lugar:

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)