2010-04-23 15 views
6

Mi aplicación tiene UITableView. Ese UITableView tiene una vista de encabezado, que es UIWebView.UITableView, UIWebViews y ScrollsToTop Propiedad = Problema

De forma predeterminada, las vistas de desplazamiento tienen su propiedad scrollsToTop establecida en YES, que permitirá al usuario tocar la barra de estado para desplazarse a la parte superior de la vista de desplazamiento.

Cuando hay dos vistas de desplazamiento incrustadas en una vista, ambas tienen su propiedad scrollsToTop establecida en YES, al tocar la barra de estado no se hace nada.

La solución es establecer una de las propiedades scrollsToTop en NO. Eso vuelve a habilitar tocando la barra de estado.

Ahora aquí está el problema: UIWebView no expone su vista de desplazamiento, y como resultado, no hay acceso a su propiedad scrollsToTop. Solo quiero que la vista de tabla se desplace hacia la parte superior cuando se toca la barra de estado, no la vista web.

¿Alguien sabe cómo puedo lograr esto?

Respuesta

3

ahora hay una propiedad ScrollView, que se prefiere:

myWebView.scrollView.scrollsToTop = YES; 
0

¿Has probado el método de delegado de UIScrollViewDelegate scrollViewShouldScrollToTop?

+0

Parece que no funciona. Inicialmente intenté implementar ese método junto con los métodos de UIWebViewDelegate, pero no pensé que funcionaría porque la vista web en sí misma es el delegado de la vista de desplazamiento, en lugar del delegado de la vista web. Entonces subclasicé UIWebView e implementé, pero todavía no tuve suerte. No parece funcionar. – Jasarien

+0

Investigación adicional: parece que UIWebView por sí mismo no responde a los métodos delegados de vista de desplazamiento. ¿Tal vez algún otro objeto interno es el delegado de la vista de desplazamiento? – Jasarien

3

Esta pregunta contiene la respuesta:

iPhone OS: Tap status bar to scroll to top doesn't work after remove/add back

no pude encontrar que previamente ya que se le pidió de manera diferente y en un tema un poco diferente, pero el resultado es el mismo.

Así que el resultado fue recorrer las subvistas hasta encontrar la vista de desplazamiento. Ya he hecho esto antes en otras aplicaciones y no pensé en ello en este caso. Debería ser App-Store-Safe, ya que tengo aplicaciones en la tienda que usan esta idea.

una categoría en UIWebView para activar o desactivar el desplazamiento hacia arriba:

@implementation UIWebView (UIWebViewScrollToTopAdditions) 

- (void)setScrollsToTop:(BOOL)scrollsToTop 
{ 
    if ([[self subviews] count] > 0) 
    { 
     UIScrollView *scrollView = (UIScrollView *)[[self subviews] objectAtIndex:0]; 
     if ([scrollView respondsToSelector:@selector(setScrollsToTop:)]) 
     { 
      [scrollView setScrollsToTop:scrollsToTop]; 
     } 
    } 
} 

@end 
2

A menudo, esto se debe a que todos los scrollviews tienen un valor por defecto . Cuando se creen nuevas vistas de desplazamiento o vistas web, tendrán scrollsToTop establecido en SÍ. He escrito una categoría sencilla para este problema específico:

-[UIScrollView makeOnlyThisScrollViewScrollToTopOnStatusBarTap]; 

https://gist.github.com/hfossli/6776203

Básicamente establece scrollsToTop a NO en todos los demás scrollViews que la que está especificando + cuidando el valor predeterminado. ¡Buena suerte!

+1

Esto fue lo único que funcionó para mí. Debería tener más votos, en mi opinión. Gracias por esto. –

+1

¡Esto funciona perfectamente! – Legnus

Cuestiones relacionadas