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