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