2010-06-15 7 views
6

Tengo una vista de desplazamiento como la vista detallada de la celda de vista de tabla. Hay múltiples vistas en la vista detallada como etiquetas, botones, etc. que estoy creando a través del constructor de interfaz. Lo que estoy creando a través del constructor de interfaz es estático. Estoy poniendo todo en una vista de altura 480.Calcular el contenido de scrollview

Una etiqueta en mi vista detallada es tener texto dinámico que puede extenderse a cualquier longitud. El problema es que necesito establecer el tamaño del contenido de la vista de desplazamiento para el que necesito su altura.

¿Cómo debo configurar la altura del scrollview siempre que el contenido sea dinámico?

Respuesta

18

Puede intentar usar los visualizadores de desplazamiento ContentSize. Me funcionó y tuve el mismo problema con el control que usa contenido dinámico.

// Calculate scroll view size 
float sizeOfContent = 0; 
int i; 
for (i = 0; i < [myScrollView.subviews count]; i++) { 
    UIView *view =[myScrollView.subviews objectAtIndex:i]; 
    sizeOfContent += view.frame.size.height; 
} 

// Set content size for scroll view 
myScrollView.contentSize = CGSizeMake(myScrollView.frame.size.width, sizeOfContent); 

I hacer esto en el método llamado viewWillAppear en el controlador para la vista que sostiene el ScrollView. Es lo último que hago antes de llamar al viewDidLoad en el super.

Espero que solucione su problema.

// Hannes

+0

Muchas gracias, Hannes .. Estoy pensando por qué esto no me parecía .. – neha

+0

Usted libera a las vistas que iterar, que los elimina de la scrollview. No se pudo pegar el código correctamente en el comentario, se agregó como respuesta en su lugar. –

0

Supongo que no hay auto en caso de desplazamiento de vista, y el contenido se debe calcular para vistas estáticas en la pantalla al menos y para dinámico una vez que se debe calcular sobre la marcha.

8

correcta ejemplo más corto:

float hgt=0; for (UIView *view in scrollView1.subviews) hgt+=view.frame.size.height; 

[scrollView1 setContentSize:CGSizeMake(scrollView1.frame.size.width,hgt)]; 

cuenta que esto sólo sumas alturas, por ejemplo, si hay dos subvistas una al lado de la otra, se agregarán ambas, haciendo que la suma sea mayor de lo que debería ser. Además, si hay espacios verticales entre las subvistas, la suma será menor de lo que debería ser. mal de altura confunde scrollRectToVisible, dando posiciones de desplazamiento al azar :)

Este bucle está funcionando y probados:

float thisy,maxy=0;for (UIView *view in scrollView1.subviews) { 
    thisy=view.frame.origin.y+view.frame.size.height; maxy=(thisy>maxy) ? thisy : maxy; 
} 
+0

Thanx Henrik, esto 'realmente útil! Como no puedo aceptar dos respuestas, renunciaré a las tuyas ... :) – neha

1

Una forma algo más fácil de hacer esto es a anidar a su disposición dentro de una vista a continuación, poner ese punto de vista dentro de la scrollview. Asumiendo que utiliza etiquetas, esto funciona de la siguiente manera:

UIScrollView *scrollview = (UIScrollView *)[self.view viewWithTag:1]; 
UIView *longView = (UIView *)[self.view viewWithTag:2]; 
scrollview.contentSize = CGSizeMake(scrollView.frame.size.width, longView.frame.size.height); 

De esta forma el Longview sabe qué tan alto que es, y el contenido de la ScrollView se acaba de establecer para que coincida.

1

Esto depende del tipo de contenido que va a agregar dinámicamente. Entonces digamos que tiene una gran información de texto para mostrar, luego use UITextView y como es una subclase de UIScrollView, puede obtener setContentSize de TextView cuando asigna el contenido de texto. En función de eso, puede establecer el tamaño total de UIScrollView.

float yPoint = 0.0f; 
UIScrollView *myScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0f, yPoint, 320.0f, 400.0f)]; 

UITextView *calculatorTextView = [[UITextView alloc] init]; calculatorTextView.text = @"My looong content text ..... this has a dynamic content"; ` 


[calculatorTextView sizeToFit]; 


yPoint = yPoint + calculatorTextView.contentSize.height; // Bingo, we have the new yPoint now to start the next component. 

// Ahora usted sabe la altura de su texto y dónde va a terminar. Entonces puede crear una etiqueta u otra vista de texto y mostrar su texto allí. Puede agregar esos componentes como subvista a la vista de desplazamiento.

UITextView *myDisplayContent = [[UITextView alloc] initWithFrame:CGRectMake(0.0f, yPoint, 300.f, calculatorTextView.contentSize.height)]; 

myDisplayContent.text = @"My lengthy text ...."; 
[myScrollView addSubview:myDisplayContent]; 

// Al final, ajuste el tamaño del contenido de la 'myScrollView' a la longitud total del área de visualización.

[myScrollView setContentSize:yPoint + heightOfLastComponent]; 

Esto funciona para mí.

0
scrollView.contentSize = [scrollView sizeThatFits:scrollView.frame.size] 

Creo que también funcionaría