如何让UIWebView滚动到顶部?

Gaz*_*zer 15 iphone objective-c

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

像这样的东西:

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

}
Run Code Online (Sandbox Code Playgroud)

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

Rec*_*dor 25

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

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


Mar*_*ams 7

这是一个非常丑陋,可怕的方法.我正在回答这个问题,告诉你什么都不做.

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


lxt*_*lxt 6

如果你希望使用JavaScript没有公开API的方法来做到这一点.UIWebViews不会从滚动视图继承,因此您无法使用任何常用方法.正如您所知,可以使用JavaScript.你可以尝试在UIWebView中找到实际的滚动视图,但它都是未记录的,在生产应用程序中并不是一件好事.

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


wl.*_*wl. 6

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

NSString *script = @"scrollTo(0, 0)";
[webView stringByEvaluatingJavaScriptFromString:script];
Run Code Online (Sandbox Code Playgroud)

要平滑滚动,请使用类似jQuery的库:

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


Dan*_*ann 5

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

WebView.scrollView.scrollsToTop = YES;
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!