Iphone 如何使UIWebView滚动到顶部?

Iphone 如何使UIWebView滚动到顶部?,iphone,objective-c,Iphone,Objective C,当我在同一个viewController中(不使用Javascript)触摸UISearchView时,是否有办法使UIWebView滚动到顶部 大概是这样的: - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar { [myWebView scrollToTop]; //pseudocode } 换句话说,当我触摸顶栏时发生的事情也可以通过编程实现 如果您不想使用JavaScript,那么没有公共AP

当我在同一个viewController中(不使用Javascript)触摸UISearchView时,是否有办法使UIWebView滚动到顶部

大概是这样的:

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

}
换句话说,当我触摸顶栏时发生的事情也可以通过编程实现

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


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

我不相信您会找到任何官方支持的方法来做您想要的事情。

这是一种非常丑陋、可怕的方法。我回答这个问题是为了告诉你什么是永远不要做的

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

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

NSString *script = @"scrollTo(0, 0)";
[webView stringByEvaluatingJavaScriptFromString:script];
要实现平滑滚动,请使用类似jQuery的库:

NSString *script = @"$('html, body').animate({scrollTop:0}, 'slow')";
[webView stringByEvaluatingJavaScriptFromString:script];
这对我很有用:

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

当然,其中webView是UIWebView的子类。

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

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

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

为什么不直接触摸设备的状态栏呢。对于所有基于scrollView的控件、tableView、webView、scrollView,都有一个:
滚动到顶部的手势是点击状态栏;如果此属性为“是”,则当出现此手势时,滚动视图将跳转到内容的顶部。此属性的默认值为YES。

访问
UIWebView
滚动视图
,并将YES设置为方法
滚动顶部

WebView.scrollView.scrollsToTop = YES;

希望这有帮助

Swift 3.x

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

OP询问如何将UIWebView滚动到0,0。它是如何触发的并不重要。这确实有效。我想我会坚持使用JavaScript方法:-)除了看起来像是黑客之外,还有什么理由不这么做吗?+1这应该是可以接受的答案。它既不丑陋也不可怕。只有当苹果改变UIWebView的视图层次结构时,它才会失败,但谁能想象没有滚动视图的web视图呢;)我已经在5.1和6.0两个版本上测试了它,并且在这两个版本上都能正常工作。几天前,我在iOS4上测试过它,但它不起作用这是一种非常昂贵的方法?在iOS5之前是这样的。请参阅下面Reconquistrator的答案,以获取最新的解决方案(),该解决方案使用了
UIWebView
的可公开访问的
scrollView
属性。非常正确!发布iOS 5后,您现在可以更改此设置。