¿Es posible redimensionar automáticamente el cuadro / límites de UILabel para que se ajuste al texto contenido? (No me importa si termina más grande que la pantalla)
Entonces, si un usuario ingresa "hola" o "mi nombre es muy largo, quiero que quepa en este cuadro", ¿nunca se trunca y la etiqueta se 'amplía' en consecuencia?
ios
iphone
objective-c
uilabel
wayneh
fuente
fuente
Respuestas:
Por favor revisa mi esencia donde he hecho una categoría para
UILabel
algo muy similar, mi categoría permiteUILabel
estirar su altura para mostrar todo el contenido: https://gist.github.com/1005520O echa un vistazo a esta publicación: https://stackoverflow.com/a/7242981/662605
Esto estiraría la altura, pero puede cambiarla fácilmente para trabajar de otra manera y estirar el ancho con algo como esto, que creo que es lo que quiere hacer:
Puede usar el
sizeToFit
método disponible de laUIView
clase de manera más simple , pero establezca el número de líneas en 1 para que sea seguro.actualización de iOS 6
Si está utilizando AutoLayout, entonces tiene una solución integrada. Al establecer el número de líneas en 0, el marco cambiará el tamaño de su etiqueta de manera apropiada (agregando más altura) para que se ajuste a su texto.
actualización de iOS 8
sizeWithFont:
está en desuso, así que usesizeWithAttributes:
en su lugar:fuente
El uso
[label sizeToFit];
logrará el mismo resultado de la categoría Daniels.Aunque recomiendo usar autolayout y dejar que la etiqueta se redimensione según las restricciones.
fuente
Si queremos que
UILabel
se reduzca y expanda según el tamaño del texto, entonces el guión gráfico con autolayout es la mejor opción. A continuación se detallan los pasos para lograrlo.Pasos
Ponga UILabel en el controlador de vista y colóquelo donde desee. También puesto
0
pornumberOfLines
propiedad deUILabel
.Déle la restricción de pin de espacio superior, inicial y final.
Update Frame
y haga clic enFix Misplacement
. Ahora, este UILabel se reducirá si el texto es menor y se expandirá si el texto es mayor.fuente
Esto no es tan complicado como lo hacen algunas de las otras respuestas.
Pin los bordes izquierdo y superior
Simplemente use el diseño automático para agregar restricciones para fijar los lados izquierdo y superior de la etiqueta.
Después de eso, se redimensionará automáticamente.
Notas
No es necesario configurarlo
sizeToFit
cuando se usa el diseño automático. Mi código completo para el proyecto de ejemplo está aquí:myLabel.preferredMaxLayoutWidth = 150 // or whatever
código. (También fijé mi botón en la parte inferior de la etiqueta para que se moviera hacia abajo cuando aumentara la altura de la etiqueta).UITableViewCell
, consulte esta respuesta .fuente
Use
[label sizeToFit];
para ajustar el texto en UILabelfuente
Creé algunos métodos basados en la respuesta de Daniel anterior.
fuente
Esto es lo que encuentro que funciona para mi situación:
1) La altura de UILabel tiene una restricción> = 0 usando autolayout. El ancho es fijo. 2) Asigne el texto en el UILabel, que ya tiene una vista general en ese punto (no estoy seguro de lo importante que es). 3) Luego, haz:
La altura de la etiqueta ahora está configurada adecuadamente.
fuente
Este es el método de categoría. Primero debe configurar el texto, que llamar a este método para ajustar la altura de UILabel.
fuente
Puede cambiar el tamaño de su etiqueta de acuerdo con el texto y otros controles relacionados de dos maneras:
Para iOS 7.0 y superior
antes de iOS 7.0, esto podría usarse para calcular el tamaño de la etiqueta
// replantea otros controles basados en labelTextHeight
Si no desea calcular el tamaño del texto de la etiqueta, puede usar -sizeToFit en la instancia de UILabel como-
// después de esto, puede obtener el marco de la etiqueta para replantear otros controles relacionados
fuente
[label sizeToFit];
viewDidLoadfuente
Tuve un gran problema con el diseño automático. Tenemos dos contenedores dentro de la celda de la mesa. El segundo contenedor cambia de tamaño según la descripción del artículo (0 - 1000 caracteres), y la fila debe redimensionarse en función de ellos.
El ingrediente que faltaba era la restricción inferior para la descripción.
He cambiado la restricción inferior del elemento dinámico de = 0 a > = 0 .
fuente
¡Se adapta siempre! :)
fuente
puede mostrar una salida de línea y luego establecer la propiedad Línea = 0 y mostrar múltiples salidas de línea y luego establecer la propiedad Línea = 1 y más
fuente
También existe este enfoque:
fuente
changeTextWithAutoHeight:width:
métodoUILabel
. ¿Podría proporcionar un enlace a dónde se puede encontrar este método en la documentación de UIKit?