UILabel - Texto de Wordwrap

150

¿Hay alguna manera de tener un texto de etiqueta para envolver palabras según sea necesario? Tengo los saltos de línea establecidos en el ajuste de línea y la etiqueta es lo suficientemente alta para dos líneas, pero parece que solo se ajustará en los saltos de línea. ¿Tengo que agregar saltos de línea para que se ajuste correctamente? Solo quiero que se ajuste si no puede caber horizontalmente.

Codezy
fuente

Respuestas:

301

Si establece numberOfLinesen 0 (y la etiqueta para ajustar la palabra), la etiqueta se ajustará automáticamente y usará tantas líneas como sea necesario.

Si está editando un UILabelen IB, puede ingresar varias líneas de texto presionando option+ return para obtener un salto de línea; returnsolo finalizará la edición.

Kendall Helmstetter Gelner
fuente
124
Para aclarar novatos como yo, esto sería: cell.textLabel.numberOfLines = 0; cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
Brian Moeskau
46
En iOS 6 y posterior, use NSLineBreakByWordWrapping, no UILineBreakModeWordWrap.
Aaron Brager
3
También puede necesitar lo siguiente: label.autoresizingMask = UIViewAutoresizingFlexibleHeight;
William Grand
66
label.lineBreakMode = .ByWordWrappingy label.numberOfLines = 0rápido
AFraser
9
Para cualquiera que no sea obvio (como yo): El UILabel debe tener algún tipo de límite en su ancho (ya sea por una restricción de ancho real o por restricciones de margen); de lo contrario no se envolverá.
jcady
27

UILabel tiene una propiedad lineBreakMode que puede establecer según sus requisitos.

Greg
fuente
11
"Tengo los saltos de línea establecidos en el ajuste de palabra". Esto solo se ajusta a los saltos de línea reales, no se romperá automáticamente una vez que sea demasiado largo.
Codezy
19

En Swift lo harías así:

    label.lineBreakMode = NSLineBreakMode.ByWordWrapping
    label.numberOfLines = 0

(Tenga en cuenta que la forma en que funciona la constante lineBreakMode es diferente a la de ObjC)

Nathan
fuente
¿Te importaría explicar cómo es diferente?
Mike
Creo que quise decir solo que el nombre es diferente. Probablemente ha cambiado nuevamente en swift3
Nathan
El modo de salto de línea debe establecerse en ajuste de palabras predeterminado
MobileMon
@MobileMonin mi experiencia que no siempre es el caso. ¿Quizás IB lo cambia en algunas circunstancias?
Nathan
label.lineBreakMode = NSLineBreakByWordWrapping en Obj C
Nupur Sharma
2

Xcode 10, Swift 4

El ajuste del texto para una etiqueta también se puede hacer en Storyboard seleccionando la etiqueta y utilizando el Inspector de atributos.

Líneas = 0 lineBreak = Ajuste de línea

ingrese la descripción de la imagen aquí

Naishta
fuente
2
Usando una etiqueta branBrand-New, agregándola directamente a la vista, esto todavía genera una etiqueta de una sola línea (con un ancho mayor que el ancho del teléfono) para mí, a pesar de establecer líneas en 0 y salto de línea en Word Wrap. ¿Hay otra configuración que podría ser necesaria? ¿Necesito adjuntar código adicional?
phihag