2011-03-02 82 views
13

有沒有辦法讓UIWebView滾動到頂部,當我觸摸說一個UISearchView在同一個viewController(不使用JavaScript)。如何讓UIWebView滾動到頂部?

事情是這樣的:

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

} 

換句話說,什麼,當我觸頂欄還可以通過編程方式發生反應。

回答

5

如果你不要想要使用JavaScript,沒有公共的API方法來做到這一點。 UIWebViews不會從滾動視圖繼承,所以你不能使用任何常用的方法。正如你所想的那樣,可以用JavaScript來完成。您可以嘗試在UIWebView中查找實際的滾動視圖,但這些視圖都沒有記錄,在生產應用程序中並不是一件好事。

更新 - 從iOS 5開始,您現在可以直接訪問網絡視圖的UIScrollView - 有關詳細信息,請參閱Reconquistador的答案。

+0

這是真實的之前的iOS 5。請Reconquistador的回答下面一個上最新的解決方案(http://stackoverflow.com/a/11796354/1148702),採用公開訪問'滾動視圖'UIWebView'的屬性。 –

+0

非常真實!發佈iOS 5後,您現在可以更改此設置。 – lxt

2

我不相信你會發現任何官方支持的方法來做你想要的。

7

這是一個非常醜陋,可怕的方式來做到這一點。我正在回答這個問題,告訴你永遠不要做什麼。

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

他的UISearchBar不是UIWebView的子視圖... –

+0

OP詢問如何將UIWebView滾動到0,0。它的觸發如何不相關。 –

+0

這確實有效。我想我會堅持使用JavaScript方法:-)除了看起來像黑客之外,其實是有其他原因嗎? – Gazzer

6

滾動的UIWebView中通過的Objective-C調用JavaScript的:

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

對於平滑滾動,使用圖書館像jQuery:

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

super!奇蹟般有效 ! –

0

這個工作對我來說:

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

其中webVie當然,w是UIWebView的子類。

-3

在UIWebView中顯示PDF時,我發現只需重新加載文檔即可跳轉到頂部。

+0

這是一個非常昂貴的方式嗎? – James

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

(請注意,如果您已設置myWebView.scrollView.contentInset.top你將要考慮到這一點,而不是隻滾動到CGPointZero。)

+0

僅僅是從iOS5.0開始的? –

+0

我已經在5.1和6.0測試過了,它在它們兩個都工作了 – Reconquistador

+1

+1從iOS5開始可用。 – InsertWittyName

0

爲什麼不碰你的設備的狀態欄。對於所有基於scrollView的控件,tableView,webView,scrollView,都有一個: 滾動到頂部的手勢是在狀態欄上點擊一下;當此屬性爲YES時,滾動視圖會在發生此手勢時跳轉到內容的頂部。此屬性的默認值爲YES。

4

訪問UIWebViewscrollview並設置YES到方法scrollsToTop;

WebView.scrollView.scrollsToTop = YES; 

希望這會有所幫助!

0

Swift 3。X

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