Cómo crear subíndices que no están en Unicode en iOS

He intentado por un tiempo crear un NSString con un carácter subíndice sin éxito. ¿Es posible hacerlo en iOS?
Necesito una forma de cambiar los caracteres de una cadena por subíndice o superíndice, y no puedo usar el Unicode para esto ya que Unicode no tiene todas las letras.
Mi suposición podría ser utilizar las tags HTML y pero no he encontrado una forma de convertir dichas tags HTML a un NSString.

Subíndice y superíndice no son rasgos de carácter. Con pocas excepciones (por ej., ², ³, ª), esta es la forma en que se representan los caracteres normales, en una fuente más pequeña y arriba / abajo de la línea de referencia de los personajes normales. Con esto en mente, no puede tener un “NSString con caracteres con subíndice”, no más de lo que puede tener un NSString con negrita o cursiva.

Como resultado, a menos que el carácter subscrito deseado ya exista en Unicode, el subíndice y el superíndice se crean en el procesamiento de cadenas, no en la creación de cadenas. Y esto no es una limitación de iOS, esta es la limitación de la forma en que se procesan las cadenas en las computadoras modernas.

¿Qué le haces a ese NSString? ¿Lo muestra en un UILabel? ¿Lo envías a través de la red? ¿Lo tratas como HTML? Tenga en cuenta que y son tags HTML; a menos que el NSString se interprete específicamente como HTML (por ejemplo, mediante un UIWebView), no se interpretarán como sup / superíndice.

No pude conseguir que NSSuperscriptAttributeName funcionara pero tuve éxito con lo siguiente:

 UILabel *label = [[UILabel alloc] init]; NSString *string = @"abcdefghi"; NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:string]; NSInteger num1 = 1; CFNumberRef num2 = CFNumberCreate(NULL, kCFNumberNSIntegerType, &num1); [attrString addAttribute:(id)kCTSuperscriptAttributeName value:(id)num2 range:NSMakeRange(4,2)]; label.attributedText = attrString; [attrString release]; 

Esto te da: enter image description here

Asignar String atribuido a una etiqueta mediante label.attributedText es nuevo con 6.0, pero la forma en que se configura la cadena atribuida podría funcionar con versiones anteriores de iOS.

Enviar un valor negativo a kCTSuperscriptAttributeName le proporciona un subíndice.

No olvides agregar el marco CoreText.

Hay un componente que puede hacer eso, a través de algunas categorías en NSString y UILabel. Aunque podría ser excesivo para su situación:

 NSString *stringWithTags = @"Bold sup sub Under strike Italic small U+B"; NSAttributedString *attributedString = [[RCTagProcessor defaultInstance] attributedStringForText:stringWithTags]; 

O puede configurar el texto en una etiqueta de inmediato:

 [self.label rc_setTaggedText:stringWithTags]; 

https://github.com/gebeleysis/RCTagProcessing