2011-03-02 84 views
13

有没有办法让UIWebView滚动到顶部,当我触摸说一个UISearchView在同一个viewController(不使用JavaScript)。如何让UIWebView滚动到顶部?

事情是这样的:

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

} 

换句话说,什么,当我触顶栏还可以通过编程方式发生反应。

回答

5

如果你不要想要使用JavaScript,没有公共的API方法来做到这一点。 UIWebViews不会从滚动视图继承,所以你不能使用任何常用的方法。正如你所想的那样,可以用JavaScript来完成。您可以尝试在UIWebView中查找实际的滚动视图,但这些视图都没有记录,在生产应用程序中并不是一件好事。

更新 - 从iOS 5开始,您现在可以直接访问网络视图的UIScrollView - 有关详细信息,请参阅Reconquistador的答案。

+0

这是真实的之前的iOS 5。请Reconquistador的回答下面一个上最新的解决方案(http://stackoverflow.com/a/11796354/1148702),采用公开访问'滚动视图'UIWebView'的属性。 –

+0

非常真实!发布iOS 5后,您现在可以更改此设置。 – lxt

2

我不相信你会发现任何官方支持的方法来做你想要的。

7

这是一个非常丑陋,可怕的方式来做到这一点。我正在回答这个问题,告诉你永远不要做什么。

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

他的UISearchBar不是UIWebView的子视图... –

+0

OP询问如何将UIWebView滚动到0,0。它的触发如何不相关。 –

+0

这确实有效。我想我会坚持使用JavaScript方法:-)除了看起来像黑客之外,其实是有其他原因吗? – Gazzer

6

滚动的UIWebView中通过的Objective-C调用JavaScript的:

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

对于平滑滚动,使用图书馆像jQuery:

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

super!奇迹般有效 ! –

0

这个工作对我来说:

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

其中webVie当然,w是UIWebView的子类。

-3

在UIWebView中显示PDF时,我发现只需重新加载文档即可跳转到顶部。

+0

这是一个非常昂贵的方式吗? – James

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

(请注意,如果您已设置myWebView.scrollView.contentInset.top你将要考虑到这一点,而不是只滚动到CGPointZero。)

+0

仅仅是从iOS5.0开始的? –

+0

我已经在5.1和6.0测试过了,它在它们两个都工作了 – Reconquistador

+1

+1从iOS5开始可用。 – InsertWittyName

0

为什么不碰你的设备的状态栏。对于所有基于scrollView的控件,tableView,webView,scrollView,都有一个: 滚动到顶部的手势是在状态栏上点击一下;当此属性为YES时,滚动视图会在发生此手势时跳转到内容的顶部。此属性的默认值为YES。

4

访问UIWebViewscrollview并设置YES到方法scrollsToTop;

WebView.scrollView.scrollsToTop = YES; 

希望这会有所帮助!

0

Swift 3。X

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