Considere que tengo el siguiente texto en a UILabel
(una larga línea de texto dinámico):
Dado que el ejército alienígena supera ampliamente al equipo, los jugadores deben usar el mundo post-apocalíptico para su ventaja, como buscar refugio detrás de contenedores de basura, pilares, autos, escombros y otros objetos.
Quiero cambiar el tamaño de la UILabel's
altura para que el texto pueda encajar. Estoy usando las siguientes propiedades UILabel
para hacer que el texto se ajuste .
myUILabel.lineBreakMode = UILineBreakModeWordWrap;
myUILabel.numberOfLines = 0;
Avíseme si no me dirijo en la dirección correcta. Gracias.
ios
cocoa-touch
uikit
uilabel
Mustafa
fuente
fuente
Respuestas:
sizeWithFont constrainedToSize:lineBreakMode:
Es el método a utilizar. A continuación se muestra un ejemplo de cómo usarlo:fuente
[label sizeToFit]
.sizeWithFont
está en desuso en iOS 7. stackoverflow.com/questions/18897896/…Ibas en la dirección correcta. Todo lo que necesitas hacer es:
fuente
En iOS 6, Apple ha agregado una propiedad a UILabel que simplifica enormemente el cambio de tamaño vertical dinámico de las etiquetas: preferredMaxLayoutWidth .
El uso de esta propiedad en combinación con lineBreakMode = NSLineBreakByWordWrapping y sizeToFit permite cambiar fácilmente el tamaño de una instancia de UILabel a la altura que acomoda todo el texto.
Una cita de la documentación de iOS:
Una muestra:
fuente
Verifique este trabajo perfectamente sin agregar una sola línea de código. (Usando Autolayout)
Hice una demostración para usted de acuerdo a sus requerimientos. Descárgalo desde el siguiente enlace,
Autoresize UIView y UILabel
Guía paso por paso :-
Paso 1: establece la restricción en UIView
1) Liderando 2) Top 3) Trailing (desde mainview)
Paso 2: - Establezca la restricción en la Etiqueta 1
1) Líder 2) Top 3) Trailing (desde su superview)
Paso 3: - Establezca la restricción en la Etiqueta 2
1) Liderando 2) Trailing (desde su superview)
Paso 4: - Lo más complicado es dar botton a UILabel desde UIView.
Paso 5: - (Opcional) Establezca la restricción en UIButton
1) Principal 2) Inferior 3) Final 4) Altura fija (desde la vista principal)
Salida: -
Nota: - Asegúrese de haber establecido Número de líneas = 0 en la propiedad Etiqueta.
Espero que esta información sea suficiente para comprender Autoresize UIView según la altura de UILabel y Autoresize UILabel Según el texto.
fuente
En lugar de hacer esto mediante programación, puede hacerlo en Storyboard / XIB mientras diseña.
fuente
Gracias a todos por la ayuda, aquí está el código que probé que me funciona
fuente
Solución a iOS7 anterior y iOS7 anterior
fuente
Como sizeWithFont está en desuso, uso este.
este obtiene atributos específicos de la etiqueta.
fuente
Aquí hay una versión de categoría:
UILabel + AutoSize.h #import
UILabel + AutoSize.m
fuente
Puede implementar el
TableViewController's
(UITableViewCell *)tableView:cellForRowAtIndexPath
método de la siguiente manera (por ejemplo):También use
NSString
elsizeWithFont:constrainedToSize:lineBreakMode:
método para calcular la altura del texto.fuente
Extensión UILabel basada en esta respuesta para Swift 4 y superior
Se puede usar como:
fuente
Y para aquellos que están migrando a iOS 8, aquí hay una extensión de clase para Swift:
fuente
La forma más fácil y mejor que funcionó para mí fue aplicar la restricción de altura a la etiqueta y establecer la prioridad en baja , es decir, (250) en el guión gráfico.
Por lo tanto, no debe preocuparse por calcular la altura y el ancho mediante programación, gracias al guión gráfico.
fuente
Mi enfoque para calcular la altura dinámica de UILabel.
Envolver para funcionar:
fuente
Método actualizado
fuente
Esta es una línea de código para obtener la altura UILabel usando Objective-c:
y usando .height obtendrá la altura de la etiqueta de la siguiente manera:
fuente
Puedes obtener la altura usando el siguiente código
Tienes que pasar
texto 2. fuente 3. ancho de etiqueta
fuente
Gracias por este post Me ayudó mucho. En mi caso, también estoy editando el texto en un controlador de vista separado. Me di cuenta de que cuando uso:
en el tableView: cellForRowAtIndexPath: método por el que la vista de etiqueta se renderizó continuamente sobre la parte superior de la vista anterior cada vez que edité la celda. El texto se pixeló, y cuando algo se eliminó o cambió, la versión anterior era visible bajo la nueva versión. Así es como resolví el problema:
No más capas extrañas. Si hay una mejor manera de manejar esto, hágamelo saber.
fuente
use esto aquí, todas las propiedades se usan en la etiqueta y pruébela incrementando el texto en el itemTitle.text como
le mostrará la respuesta perfecta cuando la necesite
fuente
También puede usarlo como método. @Pyjamasam es muy cierto, así que solo estoy haciendo su método. Puede ser útil para alguien más
y configúralo así
fuente
Para hacer esto en Swift3 lo siguiente es el código:
fuente
Agregando a las respuestas anteriores:
Esto se puede lograr fácilmente a través del guión gráfico.
fuente
Una línea es que la respuesta de Chris es incorrecta.
debiera ser
Aparte de eso, es la solución correcta.
fuente
Finalmente funcionó. Gracias chicos.
No lo estaba haciendo funcionar porque estaba tratando de cambiar el tamaño de la etiqueta en el
heightForRowAtIndexPath
método:y (sí, tonto), estaba cambiando el tamaño de la etiqueta al
cellForRowAtIndexPath
método predeterminado ; estaba pasando por alto el código que había escrito anteriormente:fuente
fuente
fuente
Mi código:
fuente
Este método le dará una altura perfecta
fuente
Swift 2:
Las líneas interesantes están
sizeToFit()
en conjunción con la configuración deframe.size.height
a en el flotador máximo, esto dará espacio para texto largo, perosizeToFit()
lo obligará a usar solo lo necesario, pero SIEMPRE llame después de configurar el.frame.size.height
.Recomiendo configurar un
.backgroundColor
para propósitos de depuración, de esta manera puede ver el marco que se representa para cada caso.fuente
yourLabel.frame.height
es una propiedad de solo obtenciónEstablezca restricciones para UILable en el guión gráfico, incluida la parte superior izquierda inferior derecha
fuente