如何让UIWebView滚动到顶部?

时间:2011-03-02 20:43:20

标签: iphone objective-c

当我触摸同一个viewController中的UISearchView(不使用Javascript)时,有没有办法让UIWebView滚动到顶部。

这样的事情:

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

}

换句话说,当我触摸顶部栏时发生的事情也可以通过编程方式发生。

10 个答案:

答案 0 :(得分:25)

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

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

答案 1 :(得分:7)

这是一个非常丑陋,可怕的方法。我正在回答这个问题,向你展示从未做过的事情。

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

答案 2 :(得分:6)

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

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

为了平滑滚动,请使用像jQuery这样的库:

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

答案 3 :(得分:5)

如果您想要使用JavaScript,则没有公共API方法可以执行此操作。 UIWebViews不会从滚动视图继承,因此您无法使用任何常用方法。正如您所知,可以使用JavaScript。你可以尝试在UIWebView中找到实际的滚动视图,但它都是未记录的,在生产应用程序中并不是一件好事。

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

答案 4 :(得分:5)

访问UIWebView scrollview 并将 YES 设置为方法 scrollsToTop

WebView.scrollView.scrollsToTop = YES;

希望这有帮助!

答案 5 :(得分:2)

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

答案 6 :(得分:1)

Swift 3.x

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

答案 7 :(得分:0)

这对我有用:

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

当然,webView是UIWebView的子类。

答案 8 :(得分:0)

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

答案 9 :(得分:-3)

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