有没有办法让UIWebView滚动到顶部,当我触摸说一个UISearchView在同一个viewController(不使用JavaScript)。如何让UIWebView滚动到顶部?
事情是这样的:
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
[myWebView scrollToTop]; //pseudocode
}
换句话说,什么,当我触顶栏还可以通过编程方式发生反应。
有没有办法让UIWebView滚动到顶部,当我触摸说一个UISearchView在同一个viewController(不使用JavaScript)。如何让UIWebView滚动到顶部?
事情是这样的:
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
[myWebView scrollToTop]; //pseudocode
}
换句话说,什么,当我触顶栏还可以通过编程方式发生反应。
如果你不要想要使用JavaScript,没有公共的API方法来做到这一点。 UIWebViews不会从滚动视图继承,所以你不能使用任何常用的方法。正如你所想的那样,可以用JavaScript来完成。您可以尝试在UIWebView中查找实际的滚动视图,但这些视图都没有记录,在生产应用程序中并不是一件好事。
更新 - 从iOS 5开始,您现在可以直接访问网络视图的UIScrollView
- 有关详细信息,请参阅Reconquistador的答案。
我不相信你会发现任何官方支持的方法来做你想要的。
这是一个非常丑陋,可怕的方式来做到这一点。我正在回答这个问题,告诉你永远不要做什么。
for (UIView *subview in webView.subviews)
{
if ([subview isKindOfClass:[UIScrollView class]])
[(UIScrollView*)subview setContentOffset:CGPointZero animated:YES];
}
他的UISearchBar不是UIWebView的子视图... –
OP询问如何将UIWebView滚动到0,0。它的触发如何不相关。 –
这确实有效。我想我会坚持使用JavaScript方法:-)除了看起来像黑客之外,其实是有其他原因吗? – Gazzer
滚动的UIWebView中通过的Objective-C调用JavaScript的:
NSString *script = @"scrollTo(0, 0)";
[webView stringByEvaluatingJavaScriptFromString:script];
对于平滑滚动,使用图书馆像jQuery:
NSString *script = @"$('html, body').animate({scrollTop:0}, 'slow')";
[webView stringByEvaluatingJavaScriptFromString:script];
super!奇迹般有效 ! –
这个工作对我来说:
CGPoint topOffset = CGPointMake(0, 0);
//[scrollView setContentOffset: topOffset animated: YES];
[[[webView subviews] lastObject] setContentOffset:topOffset animated:YES];
其中webVie当然,w是UIWebView的子类。
CGPoint top = CGPointMake(0, 0); // can also use CGPointZero here
[myWebView.scrollView setContentOffset:top animated:YES];
(请注意,如果您已设置myWebView.scrollView.contentInset.top
你将要考虑到这一点,而不是只滚动到CGPointZero。)
仅仅是从iOS5.0开始的? –
我已经在5.1和6.0测试过了,它在它们两个都工作了 – Reconquistador
+1从iOS5开始可用。 – InsertWittyName
为什么不碰你的设备的状态栏。对于所有基于scrollView的控件,tableView,webView,scrollView,都有一个: 滚动到顶部的手势是在状态栏上点击一下;当此属性为YES时,滚动视图会在发生此手势时跳转到内容的顶部。此属性的默认值为YES。
访问UIWebView
的scrollview
并设置YES到方法scrollsToTop
;
WebView.scrollView.scrollsToTop = YES;
希望这会有所帮助!
Swift 3。X
webView.scrollView.setContentOffset(CGPoint.zero, animated: true)
这是真实的之前的iOS 5。请Reconquistador的回答下面一个上最新的解决方案(http://stackoverflow.com/a/11796354/1148702),采用公开访问'滚动视图'UIWebView'的属性。 –
非常真实!发布iOS 5后,您现在可以更改此设置。 – lxt