iphone alignment right-to-left

iphone - RTL muestra números al final de las líneas.



alignment right-to-left (5)

¿Alguien rápido?

extension String { func stringByForcingWritingDirectionLTR() -> String { return "/u{200E}".stringByAppendingString(self) } func stringByForcingWritingDirectionRTL() -> String { return "/u{200F}".stringByAppendingString(self) } }

Al intentar mostrar una cadena hebrea que comienza con un número, siempre se muestra el número al final de la cadena, de esta manera: 1. יום שישי בבוקר

pero necesito que el número se muestre en el lado derecho del texto

¿Alguna solución a eso?

Sucede con UILabel & UITextField & UITextView

e intentar escribir el número en el lado izquierdo también produce el mismo resault.

Jugar con combinaciones de UITextAlignment no ayuda.


No estoy seguro si hay una forma más elegante de hacer esto, pero tal vez quieras probar algo como esto:

NSString *test = @"12. just a teststring"; NSString *number = [test substringToIndex: [test rangeOfString: @" "].location]; NSString *text = [test substringFromIndex: [test rangeOfString: @" "].location]; test = [NSString stringWithFormat: @"%@ %@", text, number]; // test == "just a teststring 12."


No necesita cambiar ninguna configuración en UILabel, solo coloque el carácter con unicode 0x200F antes de la cadena. Esta es la razón:

En Unicode, muchos caracteres tienen una direccionalidad específica, que le permite al sistema saber que debe escribirse, por ejemplo, LTR, como سلام. El párrafo usualmente usa la dirección de su primer carácter. Es por eso que su cadena sin el número se escribe de derecha a izquierda automáticamente.

Ahora, algunos personajes, como los números, tienen una direccionalidad "débil", por lo que básicamente toman la de su entorno. Cuando escribe "1. בבוקר", el sistema primero ve 1, por lo que toma la dirección LTR habitual. Cambiar la alineación no ayudará, ya que simplemente cambia el texto completo a la derecha o al centro.

Para resolver este problema, Unicode tiene dos caracteres marcadores (LTR: 0x200E, RTL: 200F). Estos son invisibles, pero dictan la direccionalidad. Así que mientras "1. בבוקר" es ...

  1. בבוקר

si escribe "# x200F" + "1. בבוקר" se mostrará así:

1. בבוקר


Sobre la base de la gran respuesta de Mo:

Este es el código Obj-C:

NSString *RTFstr = "1. בבוקר"; //This could be any right-to-left string NSString *directionalString = [@"/u200F" stringByAppendingString:[note text]]; [someUITextView setString:directionalString];

Y realmente funciona ...


Tuve un problema ligeramente diferente, pero la respuesta de Mo me dio la pista.

Quería que un texto LTR (como "abcd" ) se mostrara en la dirección RTL ( "dcba" ) sin tener que hacer la inversión de la cadena. Resulta que encerrar la cadena entre /u202E y /u202C hace el truco.

También recomiendo leer la siguiente página, ya que brinda una muy buena explicación de toda esta magia de Unicode:

http://www.iamcal.com/understanding-bidirectional-text/