scrollsToTop no funciona cuando UIWebView se usa con pushViewController, buscando una solución

StackOverflow https://stackoverflow.com/questions/1808063

  •  05-07-2019
  •  | 
  •  

Pregunta

Tengo una aplicación con una vista de tabla en la raíz de un controlador de navegación, y al seleccionar una celda de la tabla, muestra un nuevo controlador de vista que contiene solo un UIWebView (con una barra de herramientas y una barra de navegación).

Dependiendo de cómo presente la nueva vista web, la función donde el usuario puede tocar en la barra de estado en la parte superior y hacer que la vista web se desplace hacia la parte superior, funciona o no funciona.

Si uso:

  • (void) presentModalViewController: (UIViewController *) modalViewController animated: (BOOL) animated

en el RootView, entonces la vista web se desplaza hasta la parte superior.

Si cambio esa única línea de código y en su lugar utilizo:

  • (void) pushViewController: (UIViewController *) viewController animated: (BOOL) animated

en el controlador de navegación, entonces la función scrollsToTop deja de funcionar.

Lo que realmente quiero usar, sin embargo, por otras razones en el contexto de la aplicación, es el método pushViewController. PERO, también quiero mantener el comportamiento scrollsToTop.

Hasta ahora he intentado varios enfoques, algunos descritos aquí:

-Intento de establecer la propiedad webview scrollViewView scrollsToTop

((UIScrollView *)[[webView valueForKey:@"_internal"] valueForKey:@"scroller"]).scrollsToTop = YES;

(Sin efecto perceptible).

-Cambiando el orden de configuración de las propiedades de la barra de navegación o no configurando ninguna -Agregar " ventana makeKeyAndOrderFront " Llamadas después de la nueva vista push.

No creo que haya otras vistas allí que puedan reclamar el " scrollsToTop " propiedad (y la primera prueba anterior prueba que en cualquier caso).

A menos que intente incrustar UIWebView en un UIScrollView, lo que espero sea doloroso, me quedé sin rutas para explorar para resolver este problema.

¿Espero que alguien más haya encontrado una manera de corregir esto?

¿Fue útil?

Solución 2

Resulta que no estaba funcionando debido a la forma en que estaba personalizando la barra de navegación. Estaba anulando leftBarButtonItem con un UIBarButtonItem que luego ocupaba toda la barra de navegación (creo que adopté ese enfoque de un código de Apple hace muchos meses, pero no estoy seguro). Estaba utilizando el mismo enfoque en otra vista y scrollsToTop funcionó bien allí.

Eliminar ese código y colocar la vista de la barra de navegación personalizada en (por ejemplo) self.navigationController.titleView solucionó este problema. Realmente no sé por qué, como digo, funciona bien para otras vistas.

Perdí mucho tiempo con este problema, así que espero que le guarde un poco de pelo a alguien más describiéndolo aquí :)

Otros consejos

Intente el enfoque inverso como solución.

En el controlador de vista raíz:

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    self.tableView.scrollsToTop = NO;
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.tableView.scrollsToTop = YES;
}

¡Adiós!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top