2011-10-09 8 views
7

Tengo UIWebView dentro de UIScrollView.cómo reenviar UIWebView desplácese a UIScrollView? (condicionalmente)

Esta idea es ser capaz de crear más espacio de lectura en pantalla al usuario desplazarse por la página hacia arriba - desplazando el UIScrollView hacia arriba hasta la barra de herramientas está visible, y, obviamente, cuando las barras de herramientas es ya lo sumo, visibles en realidad desplazarse por la página web para mostrar más contenido que está en la página.

El navegador iPhone Safari tiene exactamente la misma funcionalidad.

vea la captura de pantalla (primero) del comportamiento predeterminado que estoy obteniendo, supongo porque: el mensaje de desplazamiento es consumido por la vista web ya que el toque/desplazamiento está sucediendo directamente en el área de la vista web.

lo que me gustaría hacer aquí es programartiicaly decidir cuándo reenviar el 'desplazamiento ascendente' al UIScrollivew y cuándo no.

Cualquier consejo sobre cómo evitar esto será tan útil. ¡¡Gracias!!

enter image description here

enter image description here

Respuesta

0

Puede añadir un cuadro de búsqueda y UIWebView en un UIScrollView uno debajo del otro. Para compensar el contenido cuando se desplaza la vista web, puede usar el siguiente fragmento de código.

UIScrollView* currentScrollView; 
for (UIView* subView in testWebView.subviews) { 
    if ([subView isKindOfClass:[UIScrollView class]]) { 
     currentScrollView = (UIScrollView*)subView; 
     currentScrollView.delegate = (id)self; 
    } 
} 

Ahora puede cambiar su valor y ScrollView la base del desplazamiento hasta el valor de desplazamiento se obtiene a partir del método delegado ScrollView didscroll.

2

El UIWebView class reference desalienta la incorporación de un UIWebView en un UIScrollView:

Importante: No se debe incrustar objetos UIWebView o UITableView en objetos UIScrollView. Si lo hace, el comportamiento inesperado puede dar como resultado porque los eventos táctiles para los dos objetos pueden mezclarse y manejarse incorrectamente .

Sin embargo supongo que todavía quiere poner en práctica su función ;-)

Idea 1: No incrustar el UIWebView en un UIScrollView, en lugar ejecutar javascript usando el método de UIWebView stringByEvaluatingJavaScriptFromString:, modificar el DOM para agregue una barra de herramientas a continuación. Si es necesario, puede hacer una devolución de llamada del código objetivo-c desde cualquier botón que se presione en la barra de herramientas mediante el registro de algunos esquemas de URL personalizados.

Idea 2: No incruste el UIWebView en un UIScrollView, pero en una UIView normal. Sobre la base de la sugerencia de Vignesh, escuche la devolución de llamada interna de scrollView de su webView scrollViewDidScroll: a través del delegado, verificando el contentOffset frente al contentSize de altura cada vez que se llama a la devolución de llamada. Una vez que son iguales, significa que has llegado al fondo. Una vez que esto sucede, puede animar el cuadro de su barra de herramientas para "ingresar" el contenido de UIView y "empujar" el marco de la vista web.

Idea 3: Ignore la recomendación de Apple e inserte UIWebView en UIScrollView. Sobre la base de la sugerencia de Vignesh, escuche la devolución de llamada interna de scrollView de su webView scrollViewDidScroll: a través del delegado, verificando el contentOffset frente al contentSize de altura cada vez que se llama a la devolución de llamada. Una vez que son iguales, significa que has llegado al fondo. Una vez que esto sucede, establezca la propiedad userInteractionEnabled de webView en NO y ajústelo en SÍ en la vista de desplazamiento que contiene la vista web y la barra de herramientas. Esperemos que el rollo continúe sin problemas. Por supuesto, debe escuchar la vista de desplazamiento que contiene de la misma manera para determinar cuándo volver al userInteractionEnabled.

Una variación de esta idea sería simplemente configurar userInteractionEnabled en NO para webView, pero establecer la altura del marco de la webView para que coincida con su tamaño de contenido, y también ampliar el tamaño del contenido de scrollView correspondiente.

Ambas variaciones tienen el inconveniente de que en algunos casos no podrás hacer cosas como hacer clic en enlaces :-(Pero quizás eso sea lo suficientemente bueno para tu caso. Al menos en la primera variación no es tan malo.

Técnicas
Cuestiones relacionadas