Actualmente tengo un UILabel
:
factLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 100, 280, 100)];
factLabel.text = @"some text some text some text some text";
factLabel.backgroundColor = [UIColor clearColor];
factLabel.lineBreakMode = UILineBreakModeWordWrap;
factLabel.numberOfLines = 10;
[self.view addSubview:factLabel];
A lo largo de la vida de mi aplicación iOS, factLabel
obtengo un montón de valores diferentes. Algunos con múltiples oraciones, otros con solo 5 o 6 palabras.
¿Cómo puedo configurar UILabel
para que el tamaño de la fuente cambie y que el texto siempre se ajuste a los límites que definí?
ios
objective-c
fonts
uilabel
CodeGuy
fuente
fuente
Respuestas:
Linea sola:
El código anterior ajustará el tamaño de fuente de su texto a (por ejemplo)
8
tratando de ajustar su texto dentro de la etiqueta.numberOfLines = 1
es obligatorio.Múltiples lineas:
Porque
numberOfLines > 1
hay un método para determinar el tamaño del texto final a través de sizeWithFont de NSString: ... métodos de adición UIKit , por ejemplo:Después de eso, puede cambiar el tamaño de su etiqueta usando el resultado
lLabelSize
, por ejemplo (suponiendo que cambiará solo la altura de la etiqueta):ios 6
Linea sola:
Comenzando con iOS6,
minimumFontSize
ha quedado en desuso. La línease puede cambiar a:
ios 7
Múltiples lineas:
Comenzando con iOS7, se
sizeWithFont
vuelve obsoleto. El caso multilínea se reduce a:iOS 13 (Swift 5):
fuente
sizeWithFont:constrainedToSize:lineBreakMode:
pero de esta manera es un poco difícilmyLabel.minimumScaleFactor:10.0/[UIFont labelFontSize];
minimumFontSize
ha quedado en desuso con iOS 6. Puede usarlominimumScaleFactor
.Esto se encargará de su tamaño de fuente según el ancho de la etiqueta y el texto.
fuente
adjustsFontSizeToFitWidth
solo reduce el texto si no cabe dentro del contenedorSegún la respuesta de @Eyal Ben Dov, es posible que desee crear una categoría para que sea flexible de usar dentro de otras aplicaciones suyas.
Obs .: He actualizado su código para que sea compatible con iOS 7
-Archivo de cabecera
-Archivo de implementación
-Uso
Salud
fuente
setNeedsLayout
/layoutIfNeeded
si está usando AutoLayout).Línea única : hay dos formas, simplemente puede cambiar.
1- Pragmáticamente (Swift 3)
Solo agrega el siguiente código
2 - Uso del inspector de atributos UILabel
fuente
Es 2015. Tuve que buscar una publicación de blog que explicara cómo hacerlo para la última versión de iOS y XCode con Swift para que funcione con varias líneas.
Fuente: http://beckyhansmeyer.com/2015/04/09/autoshrinking-text-in-a-multiline-uilabel/
fuente
Versión rápida:
fuente
Aquí hay una extensión Swift para UILabel. Ejecuta un algoritmo de búsqueda binaria para cambiar el tamaño de la fuente en función del ancho y alto de los límites de la etiqueta. Probado para trabajar con iOS 9 y autolayout.
USO: ¿Dónde
<label>
está su UILabel predefinido que necesita cambiar el tamaño de la fuente?Por defecto, esta función busca dentro del rango de tamaños de fuente de 5pt y 300pt y establece la fuente para que se ajuste a su texto "perfectamente" dentro de los límites (con precisión dentro de 1.0pt). Puede definir los parámetros para que, por ejemplo, busque entre 1pt y el tamaño de fuente actual de la etiqueta con precisión dentro de 0.1pts de la siguiente manera:
Copie / pegue el siguiente código en su archivo
NOTA: cada una de las
layoutIfNeeded()
llamadas se puede eliminar a su propia discreciónfuente
No es un poco sofisticado, pero esto debería funcionar, por ejemplo, digamos que desea limitar su uilabel a 120x120, con un tamaño de fuente máximo de 28:
fuente
Simplemente envíe el mensaje sizeToFit a UITextView. Ajustará su propia altura para ajustarse a su texto. No cambiará su propio ancho u origen.
fuente
sizeToFit
su setextViewA1
convierte en 200 puntos que termina recortándose.Versión Swift 2.0:
fuente
Esta solución funciona para líneas múltiples:
Después de seguir varios artículos y de requerir una función que escale automáticamente el texto y ajuste el recuento de líneas para que se ajuste mejor al tamaño de etiqueta dado, escribí una función yo mismo. (es decir, una cadena corta encajaría bien en una línea y usaría una gran cantidad del marco de la etiqueta, mientras que una fuerte larga se dividiría automáticamente en 2 o 3 líneas y ajustaría el tamaño en consecuencia)
Siéntase libre de reutilizarlo y ajustarlo según sea necesario. Asegúrese de llamarlo después de que
viewDidLayoutSubviews
haya terminado para que se haya configurado el marco de etiqueta inicial.fuente
Aquí está el código de relleno de una subclase de UILabel que implementa un cambio de tamaño de fuente animado:
fuente