ios nsattributedstring core-text

ios - Estilo superíndice de NSAttributedString



nsattributedstring swift 4 (3)

Quiero superíndice todas las instancias del carácter ® en un bloque de texto (exención de responsabilidad legal, naturalmente;)) y la forma predeterminada NSAttributedString no es muy buena.

Si solo dejo que el personaje sea y use solo NSString sin modificar, se procesa con el mismo tamaño que una letra mayúscula y se coloca aproximadamente en la línea base. Si agrego el atributo de superíndice a NSAttributedString siguiente manera:

[attrStr setAttributes:@{(NSString *)kCTSuperscriptAttributeName : @1} range:NSMakeRange(locationOfReg, 1)];

El personaje se levanta de la línea de base, su tamaño no se modifica, pero el espacio de línea ahora se ve afectado porque el personaje elevado interferiría en la línea de arriba.

Para ilustrar:

Creé esta imagen en Photoshop donde se logró la posición deseada reduciendo el tamaño del personaje y cambiando la línea base. Sé cómo cambiar el tamaño de fuente en iOS, pero cambiar la línea de base parece más complicado. ¿Alguna sugerencia sobre cómo lograr esto?

Edición: Supongo que podría usar el atributo superíndice como una forma de cambiar la línea de base hacia arriba. Ahora sería genial encontrar una manera de obtener el tamaño de fuente actual y luego reducirlo para permitir que se utilice el mismo método en bloques de texto de diferente tamaño.


Swift 4.2

En mi ejemplo, quiero subindicar una instancia del símbolo de infinito para que el título de mi etiqueta se vea así:

let font = UIFont(name: "Helvetica", size: 14.0) let attributedString = NSMutableAttributedString(string: "Solids(ΔE∞)•G7®", attributes: [NSAttributedStringKey.font : font!]) attributedString.setAttributes([NSAttributedStringKey.baselineOffset: -5], range: NSRange(location: 9, length: 1)) solidsLbl.attributedText = attributedString


El siguiente código parece ser el truco:

UIFont *fnt = [UIFont fontWithName:@"Helvetica" size:20.0]; NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"GGG®GGG" attributes:@{NSFontAttributeName: [fnt fontWithSize:20]}]; [attributedString setAttributes:@{NSFontAttributeName : [fnt fontWithSize:10] , NSBaselineOffsetAttributeName : @10} range:NSMakeRange(3, 1)];


Versión Swift:

let fnt = UIFont(name:"Helvetica", size:20.0) let attributedString = NSMutableAttributedString(string:"GGG®GGG", attributes:[NSFontAttributeName : fnt!]) attributedString.setAttributes([NSFontAttributeName : fnt!.fontWithSize(10), NSBaselineOffsetAttributeName: 10], range: NSRange(location: 3, length: 1))