ios iphone text uilabel

ios - iPhone UILabel-espacio sin ruptura



text (9)

Aquí hay una extensión Swift para arreglar un huérfano en una cadena reemplazando el último espacio con un espacio que no se rompe:

extension String { var replacingLastSpace: String { if let lastSpace = range(of: " ", options: .backwards, locale: .current) { return replacingCharacters(in: lastSpace, with: "/u{00a0}") } return self } }

Aunque tenga en cuenta a partir de iOS 11, UILabels resuelve este problema automáticamente .

¿Hay alguna forma de utilizar espacios sin separación en el texto de UILabel?

Por ejemplo, tengo una etiqueta con 2 líneas y el modo de salto de línea configurado en ajuste de palabras. El contenido de esta etiqueta se lee de la base de datos, donde se almacena como una cadena. Ahora a veces mi texto en la etiqueta se ve así:

lorem ipsum some text 1

Pero quiero mostrarlo así:

lorem ipsum some text 1

así que, básicamente, necesito forzar un espacio sin interrupciones entre "texto" y "1".

He encontrado alguna solución here , pero creo que podría funcionar cuando el texto se ingresa en el archivo de código fuente. En mi caso el texto está en base de datos.

¿Alguna sugerencia?


En Swift 4 tuve que usar todas las mayúsculas: /U00A0

Ejemplo:

lorem ipsum some/U00A0text 1


En el inspector, establezca el número de líneas para la etiqueta como 3 o 4 Lo que sea que necesite A continuación, el contenido se mostrará en varias líneas.


Es posible que necesite implementar una función de ajuste de palabras personalizada.

// pseudo-code instring; get len(instring) if len > textedit.width*charFontSize for (textedit.width*charFontSize ) // cycle through string insert `/n` into inString at shortest whitespace

o algo así.


No creo que haya una forma simple de hacer esto con UILabel. Por supuesto, una forma de lograr el mismo efecto es insertar manualmente un "/n" antes de " text" en su ejemplo. Otra opción es usar un UIWebView con HTML estático en lugar de UILabel, por lo que puede usar un &nbsp real.


Para Swift:

let sentence = "Barcelona, Real Madryt, Juventus Turyn, Bayern Monachium" let sentencewithnbsp = String(map(sentence.generate()) { $0 == " " ? "/u{00a0}" : $0 })


Si desea que esto funcione en un archivo .strings, puede escribir OPTION + SPACE en lugar de un espacio regular.

Los archivos de cadenas normalmente están codificados en UTF-8, por lo que si los abre en la vista Hex, verá "C2 A0" en lugar del carácter de espacio especial.


Si esto no va a suceder a menudo, puede hacer esto:

NSString *string = @"lorem ipsum some /ntext 1"; label.text = string;

Puedes generar dinámicamente donde pones el / n usando conteos de caracteres, conteos de palabras, etc.


Utilice el espacio de no interrupción (/ u00a0) ej: @"hello**/u00a0**world!"

post.text = [postText stringByAppendingString: @"1/u00a0hour/u00a0ago."];

U + 00A0 / espacio sin interrupción / Separador común, espacio

de: http://en.wikipedia.org/wiki/Whitespace_character