webkitview tutorial apple ios7 uiwebview uiscrollview

tutorial - iOS7 UIWebView tiene una inserción scrollview incorrecta en la carga inicial



wkwebview apple (2)

Cada vez que visualizo un archivo PDF en mi webView, parece que su inserción de desplazamiento vertical inicial no está configurada correctamente, pero tan pronto como empiezo a desplazarme o acercarme, salta al lugar correcto: /

El PDF está cargado pero está parcialmente debajo de la barra de navegación

Tan pronto como empiezo a desplazarme o acercarme, se ajusta a su posición predeterminada

Si cargo los archivos PNG en la misma vista web, tienen el recuadro perfecto y se muestran justo debajo de la barra de navegación (no una línea de píxeles negros entre ellos).

¿Alguien sabe cómo puedo resolver esto?

Algunas de las configuraciones de webView:

webView.clipsToBounds = NO; webView.scalesPageToFit = YES;


Implementé esta solución alternativa:

- (void)webViewDidFinishLoad:(UIWebView *)aWebView { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.15 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ self.webView.scrollView.contentOffset = CGPointMake(0, -(self.webView.scrollView.contentInset.top)); }); }

"Salta" un poco cuando se carga WebView, pero al menos el contentOffset está configurado correctamente. Es posible que también necesite ajustar la demora (0.15 ms en este ejemplo).


Me encontré con este mismo problema; muy molesto. Pude resolverlo haciendo primero que mi WebViewController sea UIScrollViewDelegate.

@interface WebViewController () <UIWebViewDelegate, UIScrollViewDelegate>

Cuando agregué algunas depuraciones en el delegado scrollViewDidScroll para inspeccionar algunas propiedades y ver qué estaba sucediendo, pude observar que el marco reajustaba mi offset de contenido para que fuera CGPointZero (lo que hace que vaya detrás de la barra de navegación). Al verificar esa condición, básicamente puede anular el efecto al restablecerlo de inmediato.

Así que una vez que UIWebView terminó de cargarse, calculo el recuadro real que necesito en función de la altura de la barra de navegación y la barra de estado.

- (void)webViewDidFinishLoad:(UIWebView *)webView { webView.scrollView.delegate = self; float inset = self.navigationController.navigationBar.bounds.size.height + [UIApplication sharedApplication].statusBarFrame.size.height; webView.scrollView.contentInset = UIEdgeInsetsMake(inset, 0.0, 0.0, 0.0); }

Entonces, cada vez que detecto un desplazamiento, evito que el desplazamiento cancele mi contenido. Excluí este efecto de cuando se amplió el usuario para que el documento no saltara si el usuario aterrizaba en este límite.

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { if(scrollView.contentOffset.y == 0 && !scrollView.zooming) [scrollView setContentOffset:CGPointMake(0.0, -(scrollView.contentInset.top))]; }

La ventaja aquí es que no necesita depender de ningún elemento de tiempo, y no ve el PDF saltar cuando se ejecuta el despacho. El contenido real que necesitas también está determinado dinámicamente.