2012-06-28 22 views
8

quiero cambiar el UITextView programación con la cantidad de texto que puse, y tengo un problema, si añado una la UITextView con el constructor del interfaz y puedo hacer esto:cambio UITextView altura mediante programación con el texto

CGRect frame = textViewA1.frame; 
frame.size.height = textViewA1.contentSize.height; 
textViewA1.frame = frame; 

todos funcionan bien, pero si creo el UITextView mediante programación, la altura no cambia, hago esto:

UITextView *textViewA1 = [[UITextView alloc] initWithFrame:CGRectMake(5, 5, 320, 50)]; 
[textViewA1 setFont:[UIFont fontWithName:@"Enriqueta" size:15]]; 
[textViewA1 setScrollEnabled:NO]; 
[textViewA1 setUserInteractionEnabled:NO]; 
[textViewA1 setBackgroundColor:[UIColor clearColor]]; 
[textViewA1 setText:@"A lot of text"]; 
CGRect frame = textViewA1.frame; 
frame.size.height = textViewA1.contentSize.height; 
textViewA1.frame = frame; 

de esta manera el tamaño altura de la UITextView no cambian, cómo puedo hacer?

Respuesta

9

creo que hay que hacer:

CGRect frame = textViewA1.frame; 
frame.size.height = textViewA1.contentSize.height; 
textViewA1.frame = frame; 

después de la addSubview:

[self.view addSubview: self.textView]; 
+0

gracias perfecto :) – Supertecnoboff

+0

u gran amigo ... –

0

es necesario calcular el tamaño del marco para el texto que tiene, por ejemplo:

UIFont *font = [UIFont fontWithName:@"Enriqueta" size:15]; 
NSString *text = @"A lot of text"; 
CGSize frameSize = [text sizeWithFont:font]; 
CGRect originalFrame = textViewA1.frame; 
textViewA1.frame = CGRectMake(CGRectGetMinX(originalFrame), CGRectGetMinY(originalFrame), frameSize.width, frameSize.height); 

para evitar que se supere una determinada altura, utilice:

CGFloat maxHeight = 100; // or something 
CGSize frameSize = [text sizeWithFont:font constrainedToSize:maxHeight]; 
+0

Para constrainedSize dar este error: Enviar 'CGFloat' (un ka 'float') al parámetro de tipo incompatible 'CGSize' (también conocido como 'struct CGSize'); , y tengo otra pregunta, ¿cómo puedo limitarme solo con el ancho? – Piero

+0

Simplemente use un número REALMENTE grande para el parámetro de altura de la rutina constrainedToSize. Dale tu ancho estático conocido y un número realmente grande para la altura. ¡El método devolverá el tamaño real necesario! Esto falla porque esa función toma un CGSize. – trumpetlicks

+0

@Piero - Para corregir el error "Enviando 'CGFloat' al parámetro de incompatible ...", intente con este 'CGSize maxSize = CGSizeMake (100, 100);' en lugar de 'CGFloat maxHeight = 100'. – pasawaya

0

Prueba este código

UIFont * font = [UIFont fontWithName:@"Enriqueta" size:15]; 
textViewA1.font = font; 
NSString * theText = @"A lot of text"; 
CGSize theStringSize = [theText sizeWithFont:font constrainedToSize:CGSizeMake(190, 1000000) lineBreakMode:UILineBreakModeWordWrap]; 
CGRect frame = textViewA1.frame; 
frame.size.height = theStringSize.height; 
textViewA1.frame = frame; 

por supuesto, esto tiene una anchura estática de 190 píxeles para el TextView. ¡Obviamente puedes cambiar eso!

10

acaba de enviar el mensaje a la sizeToFitUITextView. Ajustará su propia altura para ajustarse a su texto. No cambiará su propio ancho u origen.

[textViewA1 sizeToFit]; 
+1

Realmente puede cambiar el ancho. Depende mucho de la vista padre y de los atributos de tamaño de las otras subvistas del padre. ¡Este es un caso de uso muy "depende"! Buena respuesta añadida, aunque :-) – trumpetlicks

+0

Por favor, describa un escenario (que no sea el uso de un diseño de texto vertical) donde un 'UITextView' cambiará su ancho en respuesta a' sizeToFit'. No encontré ninguna en mi prueba. –

+0

si el ancho dado inicialmente a textView es menor que el del elemento primario y no hay nada al lado de él a la derecha o a la izquierda, puede aumentar su ancho para completar el ancho del elemento primario. SI esto NO es correcto, y tienes pruebas, en realidad me encantaría verlo, ya que podría simplificar partes del código que tengo :-) Gracias por cualquier información. – trumpetlicks

-2

para desplazarse UITextView cuando se añade la línea múltiple en TextView

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView 
{ 
    CGRect frameTextView = textView.frame; 
    frameTextView.height -= KEY_BOARD_HEIGHT; 
    textView.frame = frameTextView; 
} 
- (BOOL)textViewShouldEndEditing:(UITextView *)textView; 
{ 
    CGRect frameTextView = textView.frame; 
    frameTextView.height += KEY_BOARD_HEIGHT; 
    textView.frame = frameTextView; 
} 
+0

no es lo que pregunta – Efren

Cuestiones relacionadas