Estilo superíndice NSAttributedString

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:

variantes de (R)

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?

Editar: Supongo que podría usar el atributo de superíndice como una forma de cambiar la línea de base. Ahora sería genial encontrar una manera de obtener el tamaño de fuente actual y, posteriormente, reducirlo para permitir que se use el mismo método en bloques de texto de diferentes tamaños.

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

enter image description here

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)) 

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í: enter image description here

 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