2011-03-02 9 views
13

¿Hay alguna manera de hacer que un UIWebView se desplace hasta la parte superior cuando toco decir un UISearchView dentro del mismo control de visualización (sin usar Javascript)?¿Cómo hago para que UIWebView se desplace hasta la parte superior?

Algo como esto:

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar 
{ 
     [myWebView scrollToTop]; //pseudocode 

} 

En otras palabras, ¿qué ocurre cuando me toque la barra superior también puede ocurrir mediante programación.

Respuesta

5

Si no desea querer utilizar JavaScript no hay un método de API público para hacer esto. UIWebViews no hereda de las vistas de desplazamiento, por lo que no puede usar ninguno de los métodos habituales. Como has descubierto, es posible hacerlo con JavaScript. Puede intentar encontrar la vista de desplazamiento real en UIWebView, pero está todo indocumentado y no es realmente bueno hacerlo en una aplicación de producción.

Actualización - a partir de iOS 5 ahora puede obtener acceso directo a una vista web UIScrollView - consulte la respuesta de Reconquistador para obtener más información.

+0

Esto era cierto antes de iOS 5. Véase la respuesta de reconquistador abajo para una solución actualizada (http://stackoverflow.com/a/11796354/1148702) que utiliza el acceso público 'ScrollView 'propiedad de' UIWebView'. –

+0

¡Muy cierto! Publica iOS 5 ahora puedes cambiar esto. – lxt

2

No creo que encuentre ningún método oficialmente compatible para hacer lo que está buscando.

7

Aquí hay una forma realmente fea y terrible de hacer esto. Estoy respondiendo esto para mostrarte lo que nunca debes hacer.

for (UIView *subview in webView.subviews) 
{ 
    if ([subview isKindOfClass:[UIScrollView class]]) 
     [(UIScrollView*)subview setContentOffset:CGPointZero animated:YES]; 
} 
+0

Su UISearchBar no es una subvista de UIWebView ... –

+0

OP pregunta cómo desplazar un UIWebView a 0,0. Cómo se desencadena es irrelevante. –

+0

Esto realmente funciona. Creo que me quedaré con el método de JavaScript :-) ¿Hay realmente una razón para no hacer otra cosa que parece un truco? – Gazzer

6

desplazamiento del UIWebView llamando JavaScript a través de Objective-C:

NSString *script = @"scrollTo(0, 0)"; 
[webView stringByEvaluatingJavaScriptFromString:script]; 

Para un desplazamiento más suave, utilice una biblioteca como jQuery:

NSString *script = @"$('html, body').animate({scrollTop:0}, 'slow')"; 
[webView stringByEvaluatingJavaScriptFromString:script]; 
+0

super! Funciona de maravilla ! –

0

Esto funciona para mí:

CGPoint topOffset = CGPointMake(0, 0); 
//[scrollView setContentOffset: topOffset animated: YES]; 
[[[webView subviews] lastObject] setContentOffset:topOffset animated:YES]; 

Dónde webVie w es la subclase de UIWebView, por supuesto.

-3

Al mostrar un PDF en una UIWebView, descubrí que puede saltar a la cima simplemente recargando el documento.

+0

¿Es una forma muy costosa de hacer esto? – James

23
CGPoint top = CGPointMake(0, 0); // can also use CGPointZero here 
[myWebView.scrollView setContentOffset:top animated:YES]; 

(Tenga en cuenta que si ha configurado myWebView.scrollView.contentInset.top tendrá que tener en cuenta que en lugar de simplemente desplazándose hasta CGPointZero.)

+0

solo desde iOS5.0? –

+0

Lo he probado en 5.1 y 6.0 y funciona en ambos – Reconquistador

+1

+1 Disponible en iOS5 y en adelante. – InsertWittyName

0

por qué no sólo tiene que tocar la barra de estado del dispositivo. para todos los controles basados ​​en scrollView, tableView, webView, scrollView, hay un: El gesto scroll-to-top es un toque en la barra de estado; cuando esta propiedad es SÍ, la vista de desplazamiento salta a la parte superior del contenido cuando se produce este gesto. El valor predeterminado de esta propiedad es SÍ.

4

un acceso a la UIWebView 's scrollview y establecer al método scrollsToTop;

WebView.scrollView.scrollsToTop = YES; 

Hope this helps!

0

Swift 3.x

webView.scrollView.setContentOffset(CGPoint.zero, animated: true) 
Cuestiones relacionadas