2011-10-09 30 views
7

我有一個UIWebView裏面UIScrollView如何轉發UIWebView滾動到UIScrollView? (有條件)

想法是能夠在屏幕上創造更多的閱讀空間當用戶滾動網頁向上 - 通過滾動的UIScrollView向上,直到工具欄是可見,顯然當工具欄是曲子可見實際上滾動網頁顯示更多內容在網頁上。

IPhone Safari瀏覽器的功能完全相同。

查看屏幕截圖(第一次)我得到的默認行爲 - 我猜是因爲:由於觸摸/滾動直接發生在webview區域,因此滾動消息被webview消耗。

我想在這裏做什麼是programatiicaly決定何時轉發'向上滾動'到UIScrollivew和什麼時候不到。

有關如何解決此問題的任何提示將非常有用。謝謝!!

enter image description here

enter image description here

回答

0

您可以在一個UIScrollView一個低於其他添加搜索框和UIWebView的。要在webview滾動時獲取內容偏移量,可以使用以下代碼片段。

UIScrollView* currentScrollView; 
for (UIView* subView in testWebView.subviews) { 
    if ([subView isKindOfClass:[UIScrollView class]]) { 
     currentScrollView = (UIScrollView*)subView; 
     currentScrollView.delegate = (id)self; 
    } 
} 

現在您可以將您的基本滾動視圖偏移的y值更改爲您從scrollview didscroll委託方法獲得的偏移值。

2

UIWebView class reference阻礙了對一個UIScrollView嵌入一個UIWebView:

重要:您不應該在 的UIScrollView對象嵌入的UIWebView或UITableView的對象。如果這樣做,可能會導致意外的行爲 ,因爲兩個對象的觸摸事件可能混淆並且錯誤地處理了 。

但是我想你還是想實現你的功能;-)

理念1:不要嵌入的UIWebView在一個UIScrollView,而不是使用一個UIWebView的stringByEvaluatingJavaScriptFromString:方法運行JavaScript,修改DOM來添加下面的工具欄。如果需要,您可以通過註冊一些自定義URL方案,從工具欄上推送的任何按鈕回調Objective-C代碼。

想法2:不要將UIWebView嵌入到UIScrollView中,而是嵌入到普通的UIView中。基於Vignesh的建議,每次調用回調時,通過代理監聽webView的內部scrollView的scrollViewDidScroll:回調,檢查contentOffsetcontentSize的高度。一旦它們平等,就意味着你已經到了底部。一旦發生這種情況,您可以爲您的工具欄的框架設置動畫,以「輸入」包含的UIView並將webView的框架「推出」。

想法3:忽略Apple的建議,並將UIWebView嵌入到UIScrollView中。基於Vignesh的建議,每次調用回調時,通過代理監聽webView的內部scrollView的scrollViewDidScroll:回調,檢查contentOffsetcontentSize的高度。一旦它們平等,就意味着你已經到了底部。一旦發生這種情況,將webView的userInteractionEnabled屬性設置爲NO,並將其設置爲包含webView和工具欄的scrollView上的YES。希望滾動能夠繼續順利進行。當然,您必須以相同的方式來聽取包含滾動視圖,以確定何時切換回userInteractionEnabled

這一理念的變化將只設置userInteractionEnabled爲NO web視圖,但設置的WebView框的高度,以匹配其contentSize,並且也相應擴大含滾動視圖的contentSize。

這兩個變化都有缺點,在某些情況下,你將無法做到諸如點擊鏈接之類的事情:-(但對於你的情況來說,這可能已經足夠了,至少在第一個變體中它並不是那麼糟糕。