Hay una manera de utilizar la no ruptura de los espacios en UILabel texto?

Por ejemplo, he etiqueta con 2 líneas y saltos de línea el modo de ajuste. 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 mostrar es como que:

lorem ipsum some
text 1

así que básicamente, necesito a fuerza de no romper el espacio entre ‘texto’ y ‘1’.

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

Alguna sugerencia?

InformationsquelleAutor Marcin | 2011-02-24

9 Comentarios

  1. 48

    Uso el no-break espacio (\u00a0) ex: @"hello**\u00a0**world!"

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

    U+00A0 /no-break /espacio Común Separador, el espacio

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

    • Para conseguir que esto funcione en mi Localizable.las cadenas de archivo, he tenido que utilizar todos los caps: \U00A0.
  2. 32

    Para Swift:

    let sentence = "Barcelona, Real Madryt, Juventus Turyn, Bayern Monachium"
    let sentencewithnbsp = String(map(sentence.generate()) {
        $0 == " " ? "\u{00a0}" : $0
    })
    • También es posible utilizar \u{00a0} directamente en la cadena sin necesidad de utilizar el map función de lorem\u{00a0}ipsum
    • Si utiliza Localizable.las cadenas, el valor Unicode debe estar en mayúsculas: hello\U00A0world
  3. 10

    Si quieres conseguir que esto funcione en un .las cadenas de archivo, puede escribir OPCIÓN + ESPACIO en lugar de un espacio normal.

    .las cadenas de archivos normalmente son codificados en UTF-8, así que si lo tienes abierto en Hexadecimal, verás «C2 A0» en lugar de el especial carácter de espacio.

    • Gracias por la opción+espacio de la punta – no sabía que esta trabajado para otra cosa que nuevas líneas!
  4. 9

    En Swift 4 tuve que usar todos los caps: \U00A0

    Ejemplo:

    lorem ipsum some\U00A0text 1

    • Es \u{00a0} después de la reciente actualización
  5. 1

    En el Inspector número de líneas de la Etiqueta como 3 o 4 Lo que nunca se requieren, a Continuación, el Contenido se visualizará en varias líneas.

    • El número de líneas es de 5. Eso no es un problema. Como puede ver, el texto se muestra de todos modos en 2 líneas, en mi primer y segundo ejemplo. El problema es que no quiero que los que están separados ‘1’ en la otra línea.
    • A continuación, establezca el número de líneas 1 y en «ajustar para adaptarse a» disminuir el tamaño de la fuente.
    • Eso no es una buena opción para mí, porque quiero que fija los tamaños de fuente (por ejemplo, para tener el mismo tamaño de fuente como en el resto de etiquetas, con diferentes textos).
  6. 1

    Usted puede necesitar para implementar una palabra personalizada de ajuste de la función.

    //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 por el estilo.

  7. 1

    Creo que no hay una manera simple de hacer esto con UILabel. Por supuesto, una forma de lograr el mismo efecto es insertar manualmente una "\n" antes «text" en su ejemplo. Otra opción es utilizar un UIWebView con HTML estático en lugar de la UILabel, así que usted puede utilizar un real &nbsp.

    • Finalmente, he hecho esto mediante la inserción de «\n» en mis textos. No es exactamente lo que he tratado de hacer, pero de todos modos, funciona.
  8. 1

    He aquí una rápida extensión para solucionar un huérfano en una cadena mediante la sustitución de la última espacio con un espacio de no separación:

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

    Aunque se nota como de iOS 11, UILabels resolver este problema de forma automática.

  9. 0

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

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

    Puede generar dinámicamente donde se coloca la \n utilizando el carácter cuenta, recuentos de palabras, etc…

Dejar respuesta

Please enter your comment!
Please enter your name here