2012-01-26 6 views
9

Estoy intentando desplazarme a una página en particular en un documento pdf que he cargado en un UIWebView. Soy capaz de hacer esto sin ningún problema en el uso de iOS 5:La altura del contenido de UIWebView no es precisa en scrollview.contentsize

pageHeight = webView.scrollView.contentSize.height/numberOfPages; 
[[webView scrollView] setContentOffset:CGPointMake(0,pageNumber*pageHeight) animated:YES]; 

Esto sólo funciona Sin embargo, si la página se ha cargado en la vista ya y el desplazamiento para está provocada por una acción del usuario. Para el caso donde quiero cargar un nuevo pdf en la vista web a una página específica, estoy teniendo problemas. Estoy solicitando la carga de la nueva pdf, y luego hacer algo como lo siguiente carga cuando la página se ha completado:

- (void)webViewDidFinishLoad:(UIWebView *)webView { 
    int contentHeight = myWebView.scrollView.contentSize.height; 
    int pageHeight = contentHeight/5; // 5 total pages in example PDF 
    int scrollDelta = pageHeight*2; // Scroll forward 2 pages 

    [[myWebView scrollView] setContentOffset:CGPointMake(0,scrollDelta) animated:YES]; 
} 

Mientras myWebView.scrollView.contentSize.height es la altura del documento completo cuando corro código similar en un clic de botón después de cargar el documento inicial, cuando cargo un documento nuevo y webViewDidFinishLoad desencadena myWebView.scrollView.contentSize.height es igual al alto de UIWebview, y no el contenido dentro de él. Esto, por supuesto, hace que pageHeight sea mucho más pequeño de lo que necesita ser y no se desplaza a la posición correcta.

He intentado hacks como retrasar el código de desplazamiento por un bit después de webViewDidFinishLoad pensando que tal vez la página no se ha cargado completamente aunque obtengo la devolución de llamada, pero en esos casos contentSize.height es 0 por algún motivo.

Cualquier idea sería muy apreciada.

Gracias!

+0

Estoy luchando con el mismo problema. ¿Encontraste alguna solución? – Niklas

+0

posible duplicado de [¿Cómo determinar el tamaño del contenido de un UIWebView?] (Http://stackoverflow.com/questions/3936041/how-to-determine-the-content-size-of-a-uiwebview) –

Respuesta

1

para obtener el tamaño de contenido o el número de páginas contenidas en la vista web puede hacer lo siguiente:

float w = [[mywebview stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('html')[0].scrollWidth;"] floatValue]; 
    int pageCount = ceil(w/self.view.frame.size.width); 

y para desplazarse a una posición determinada de la vista web puede hacer lo siguiente:

[mywebview stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"window.scrollTo(%d,0);",xPosition]]; 

Le resulta útil.

Cuestiones relacionadas