2010-01-27 16 views
11

Ya hice varias búsquedas en Stack Overflow y Google, pero no pude encontrar una solución a mi problema.Autoresize UITextView y UIScrollView

Tengo una vista de detalles para un producto que incluye UIScrollView y algunas subvistas (UIImageView, UILabel, UITextView). Puede encontrar un ejemplo here.

Primero quiero convertir automáticamente el UITextView (¡no el texto mismo!) A la altura correspondiente. Luego quiero convertir automáticamente toda UIScrollView para que se ajuste a la altura de mi UITextView y los elementos que están sobre ella. He intentado el siguiente código:

myUITextView.frame = CGRectMake(2.0, 98.0, 316.0, self.view.bounds.size.height); 

[scrollView setContentOffset:CGPointMake(0.0, 0.0) animated:NO]; 
scrollView.contentSize = CGSizeMake(320.0, 98.0 + [myUITextView frame].size.height); 

[self.view addSubview:scrollView]; 

98,0 + [myUITextView marco] .size.height) porque mi pensamiento fue: Después de conseguir la altura de myUITextView, agregue la altura de los otros subvistas (98,0) lo.

Desafortunadamente no funciona muy bien. Dependiendo del contenido de UIScrollView, es demasiado corto o demasiado largo. Hice algunas de registro con el resultado de que la altura de la UITextView es siempre el mismo:

2010-01-27 14: 15: 45.096 myApp [1362: 207] [myUITextView marco] .size.height: 367,000000

Gracias!

Respuesta

0

Una UITextView no se redimensionará automáticamente a su contenido (no tan lejos como sé de todos modos) por lo que necesita obtener el tamaño del texto usted mismo y ajustar el tamaño de UIView en consecuencia.

Las funciones de this page ayudarán - se puede utilizar para obtener el ancho y la altura de una cadena, algo así como

// Get the size that the string will render at 
NSString *contents = @"This is the content of your UITextView"; 
CGSize areaSize = [contents sizeWithFont:myView.font forWidth:myView.frame.size.width lineBreakMode:UILineBreakModeWordWrap]; 

// Then set the frame of your UITextView to be the right size 
myView.bounds = CGRectMake(0, 0, areaSize.width, areaSize.height); 

A continuación, puede layout los otros componentes alrededor de ella.

Espero que esto ayude,

S

PS Advertencia, el enlace a la documentación es correcta, pero mi ejemplo de código no se ha probado, lo siento :)

+0

Gracias por su ayuda. Parece sizeWithFont: forWidth: lineBreakMode: solo funciona para una sola línea de texto. He intentado sizeWithFont: constrainedToSize: lineBreakMode: y funciona un poco. A veces no calcula la altura correcta. Supongo que es debido a algunos saltos de línea en mi fuente de texto, así que agregué 30 px al botón. – dennis3484

+0

¡Acabo de consultar los documentos y tiene toda la razón, lo siento! He tenido problemas para devolver la altura incorrecta y utilicé exactamente la misma solución que tú. Añade 30 píxeles :) – deanWombourne

22

realidad, hay una manera muy fácil de hacer cambie el tamaño del UITextView a su altura correcta utilizando su contentSize.

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

Una cosa a tener en cuenta es que el contentSize correcta sólo está disponible después de la UITextView se ha añadido a la vista con addSubview. Antes de eso, es igual a frame.size

+0

funciona como un amuleto – Krystian

Cuestiones relacionadas