2012-06-08 5 views
6

que tienen un problema que involucra UILabel 's sizeToFit método:tamaño para adaptarse a UILabel

UILabel *questionLabel = [[UILabel alloc]initWithFrame:CGRectMake(0,0,320,320)]; 
questionLabel.lineBreakMode = UILineBreakModeWordWrap; 
questionLabel.backgroundColor=[UIColor clearColor]; 
questionLabel.textAlignment=UITextAlignmentLeft; 
questionLabel.textColor=[UIColor blackColor]; 
questionLabel.tag=1; 
questionLabel.font=[UIFont systemFontOfSize:13]; 
questionLabel.numberOfLines = 0; 
[questionLabel sizeToFit]; 
[myView addSubview:questionLabel]; 

que había escrito el código para mostrar mis datos. Pero si escribo: [questionLabel sizeToFit], mis datos no se muestran correctamente. Si elimino [questionLabel sizeToFit], se muestra pero solo muestra la mitad de los datos.

Gracias y saludos cordiales.

+0

¿por qué establece el número de líneas como 0 estáticamente? En su lugar, puede calcular el ancho o alto o ambos usando el tamaño de fuente inicializando con CGRectZero. – Tarun

+0

gracias por responder. ¿Puedes ampliar la frase anterior claramente? – fayaz

+1

Bueno, sé que llego tarde, pero tal vez esto ayude: 'sizeToFit' no funciona con 'UILabel' con múltiples líneas. Puede usar una 'UITextView' para eso, pero debe asegurarse de que el tamaño de la vista de texto sea mayor de lo necesario. De esta manera: configure la altura de la vista = 'MAXFLOAT' y luego llame 'sizeToFit'. Si desea mantener una etiqueta, debe usar la forma 'sizeWithFont: constrainedToSize: lineBreakMode:'. Espero que esto ayude. ¡Aclamaciones! – George

Respuesta

-1

solo asegúrese de aumentar el número de líneas de la etiqueta. En lugar de

questionLable.numberOfLines = 0; hacer uso de

questionLable.numberOfLines = 4; Como será forzar al sistema a calcular la anchura más pequeña posible para 4 líneas.

Todo esto es posible a través del archivo Xib también ..

+0

El problema es que no puedo ver los datos. si escribo [questionLable sizeToFit] – fayaz

16
NSString *yourString = @"write your label text here"; 
CGSize s = [yourString sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:CGSizeMake(width, MAXFLOAT) lineBreakMode:UILineBreakModeWordWrap]; 
questionLabel.frame = CGRectMake(0, 0, s.width, s.height); 

Comprobar si ayuda.

+0

Esto ya no funciona en ios 8, ya que este método ha quedado en desuso – chandhooguy

+0

¡Use NSLineBreakByWordWrapping en lugar de UILineBreakModeWordWrap, que está en desuso! :) – MasterRazer

+0

sizeWithFont: ahora está en desuso, por lo que esto ya no es correcto – AppHandwerker

0

busqué en Google el problema de arriba y encontré información de que sizeToFit parece ser un error y ya se ha informado a Apple. Así como una solución u puede utilizar este código:

NSString * myText = [NSString stringWithString:@"some text"]; 

CGFloat constrainedSize = 265.0f; 

UIFont * myFont = [UIFont fontWithName:@"Arial" size:19]; 

CGSize textSize = [myText sizeWithFont: myFont 
         constrainedToSize:CGSizeMake(constrainedSize, CGFLOAT_MAX) 
          lineBreakMode:UILineBreakModeWordWrap]; 



CGRect labelFrame = CGRectMake (0, 0, textSize.width, textSize.height); 

UILabel *label = [[UILabel alloc] initWithFrame:labelFrame]; 

[label setFont:myFont]; 

[label setText:myText]; 
+0

Gracias por mantener el esfuerzo, pero sigue siendo el mismo problema que está llegando – fayaz

2

Creo que lo mejor es utilizar la respuesta Taus-iDeveloper para calcular el tamaño de una etiqueta.
Solo quiero decir que el motivo por el que su código no funciona es porque no ha configurado el texto en su UILabel, por lo que sizeToFit devuelve CGSizeZero (por lo que no aparece en la pantalla). Debe configurar el texto antes de usar sizeToFit.

2

He descubierto que si está en diseño automático a continuación, el tamaño para caber no funciona

+0

eso es genial, está funcionando – Vishal

0

He encontrado que cuando se utiliza con un sizeToFit UILabel, en InterfaceBuilder necesita cambiar la propiedad de Autoshrink 'Tamaño de fuente fija' a " Tamaño de fuente mínimo '. Por lo general, establezco su valor en 0.5 para asegurarme de que funciona correctamente.

Cuestiones relacionadas