2009-09-16 57 views
6

我有一個UIWebView,我想放在我的半透明UINavigationBar下。通常,當我將UIScrollView放置在半透明的UINavigationBar下時,我將其contentOffset設置爲使得所有內容最初都會在欄之後被推入,以便可以看到它;此後,用戶可以滾動文字,並且會遮擋該欄。UIWebView透明UINavigationBar

問題是,UIWebView似乎不是UIScrollView的適當的子類;因此,我不能使用setContentOffset。有沒有人有任何提示或技巧讓UIWebView在半透明的導航欄上看起來不錯?謝謝。

回答

0

我不知道是否有乾淨方法來做到這一點。我還沒有嘗試過,但這裏是一個想法:

  1. 在原點0,0
  2. 攔截所有的屏幕觸摸
  3. 繪製的UIWebView如果檢測到用戶向上拖動(向上滾動web視圖)不要通過觸摸
  4. 而是,將webview向上移動x個像素,使其原點爲(0,-x)。然後更改高度以添加x像素
  5. 您將需要保持某種狀態,以便知道何時停止調整webview的大小並開始傳遞觸摸,以便webview將滾動。

重新獲得它只是在下拉(向下滾動webview)時才做到的。

+0

你是如何做到這一點的'不要通過觸摸到uiwebview'? – dotnetcoder 2011-10-12 03:43:23

+0

這可能不是最簡單的方法來實現這一點,尤其是如果你的目標是iOS 5+(UIWebView scrollView.contentInset完成這個乾淨)。通過zerotool查看答案。對於iOS 4,您可以迭代UIWebview子視圖以可靠地訪問相同的UIScrollView。 – Prometheus 2012-02-13 19:21:09

+0

這是一個非常非常老的q和 – coneybeare 2012-02-13 21:21:59

0

可能做到這一點的另一種方法是在您要呈現的html代碼中插入一個div,以便它在頁面的頂部分開。請確保正確設置縮放並將uiwebviews原點設置爲(0,-x)以開始。

2

我通過設置UIWebView的子視圖不會夾到邊界實現這一點,那麼我可以把在它頂部的工具欄,並得到想要的效果:

for (UIView *subview in theWebView.subviews) { 
    subview.clipsToBounds = NO; 
} 
9

隨着iOS 5中,你可以使用滾動視圖UIWebView的屬性,並設置一個contentInset來調整位置。

CGFloat top = 0.0; 

if(self.navigationController != nil && self.navigationController.navigationBar.translucent) { 
    top = self.navigationController.navigationBar.bounds.size.height; 
} 

UIWebView* wv = ... 

wv.scrollView.contentInset = UIEdgeInsetsMake(top, 0.0, 0.0, 0.0); 
+0

我建議在iOS 5中使用它。在iOS 4的情況下,您可以迭代子視圖以查找isKindOfClass的視圖:對於[UIScrollView類]返回true。然後只需在該視圖上設置contentInset(轉換爲UIScrollView)。 – Prometheus 2012-02-13 19:18:49

+0

這看起來像是適合我的解決方案。 – bio 2015-07-12 16:59:25

0

隨着iOS 7的問世,偏移高度現在需要包含頂部狀態區域的高度。否則,iOS7設備將有20個像素的webview仍然隱藏在導航欄下。

在需要支持的iOS 7及以上設備的一個項目,像一個宏發現 here:

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 

是非常有用的。 一種改進的上面列出zerotool的有用的代碼版本,現在可能看起來像這樣:

if (self.navigationController != nil && self.navigationController.navigationBar.translucent) { 
    top = self.navigationController.navigationBar.bounds.size.height; 
    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) { 
     top += [[UIScreen mainScreen] applicationFrame].origin.y; 
    } 
} 
// (etc.) 
3

最簡單的方法是設置:

webView.clipsToBounds = NO; 
webView.scrollView.clipsToBounds = NO; 

它bouth的iOS 7 & 6工作,我沒試試,但在iOS 5上可能也是

相關問題