当我触摸同一个viewController中的UISearchView(不使用Javascript)时,有没有办法让UIWebView滚动到顶部。
这样的事情:
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
[myWebView scrollToTop]; //pseudocode
}
换句话说,当我触摸顶部栏时发生的事情也可以通过编程方式发生。
答案 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,我发现只需重新加载文档即可跳转到顶部。