iphone - tipo - ¿Cómo ajustar y hacer que el ancho de un UILabel se ajuste al tamaño del texto?
margenes en pages (8)
En mi proyecto, hay un UILabel
con texto. El tamaño de fuente es 16pt. El contenido del texto se cambia dependiendo de los diferentes casos. Espero que pueda ajustar automáticamente el ancho de UILabel
para que se ajuste al ancho total de los textos sin estirar.
¿Es posible?
Como sizeWithFont se deprecia en IOS 7.0, a continuación, debajo del código
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
if (SYSTEM_VERSION_LESS_THAN(@"7.0")) {
// code here for iOS 5.0,6.0 and so on
CGSize fontSize = [itemCat_text sizeWithFont:[UIFont fontWithName:@"Helvetica" size:12]];
} else {
// code here for iOS 7.0
fontSize = [itemCat_text sizeWithAttributes:
@{NSFontAttributeName:
[UIFont fontWithName:@"Helvetica" size:12]}];
}
Esto supone que ya ha configurado la fuente:
label.text = @"some text";
[label sizeToFit];
También necesitará definir un ancho máximo y decirle a su programa qué hacer si sizeToFit le da un ancho mayor que ese máximo.
He aquí cómo hacerlo, supongamos que el siguiente messageLabel
es la etiqueta que desea que tenga el efecto deseado. Ahora, prueba esta simple línea de códigos:
// Set width constraint for label; it''s actually the width of your UILabel
CGFloat constrainedWidth = 240.0f;
// Calculate space for the specified string
CGSize sizeOfText = [yourText sizeWithFont:yourFont constrainedToSize:CGSizeMake(constrainedWidth, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap];
UILabel *messageLabel = [[UILabel alloc] initWithFrame:CGRectMake(20,20,constrainedWidth,sizeOfText.height)];
messageLabel.text = yourText;
messageLabel.numberOfLines = 0;// This will make the label multiline
Si ya configura su fuente y su tamaño, y si tiene su marco definido, intente utilizar lo siguiente para estas dos condiciones comunes:
if (label.text.length > maxCharPerLine) [label setNumberOfLines:0]; // infinite lines
else [label setNumberOfLines:1]; // one line only
// Adjust your font size to fit your desired width.
[label setAdjustsFontSizeToFitWidth:YES];
Sigue esto.
CGSize stringsize = [yourString sizeWithFont:[UIFont systemFontOfSize:fontSize]];
[label setFrame:CGRectMake(x,y,stringsize.width,height)];
[label setText: yourString];
Veo tres opciones aquí.
Primero, haga que el tamaño de la etiqueta sea lo suficientemente grande como para contener cualquier texto. Eso es muy simple, pero no siempre funciona bien, depende de las vistas que lo rodean.
En segundo lugar, Label puede adaptar el tamaño de la fuente para texto más largo ( adjustsFontSizeToFitWidth
propiedadFontSizeToFitWidth). Esto a menudo no es deseable, las diferentes fuentes en los elementos pueden verse feas.
La última opción es redimensionar la etiqueta de forma programática de acuerdo con su texto actual. Para calcular el tamaño requerido para mantener el texto con la fuente actual, use algo como esto:
CGSize textSize = [[someLabel text] sizeWithFont:[someLabel font] forWidth:someLabel.bounds.size.width lineBreakMode:UILineBreakModeWordWrap];
NSString *txt1=@"I am here.";
CGSize stringsize1 = [txt1 sizeWithFont:[UIFont systemFontOfSize:14]];
[label setFrame:CGRectMake(x,y,stringsize1.width,hieght)];
[label setText:txt1];