3

我的應用程序使用UINavigationController,並且最終視圖(詳細視圖)允許您使用UIWebView在應用程序內查看外部網站。可滾動的UINavigationBar類似於移動Safari

我想在用戶查看網頁時釋放一些額外的屏幕空間,並希望模擬iPhone上Safari的工作原理,當您查看時,頂部的URL欄向上滾動並離開屏幕UIWebView中的內容在摺疊下面。

任何人都有如何實現這個想法?如果我設置navigationBarHidden屬性並在頂部滾動我自己的自定義欄並在UIScrollView中設置它和UIWebView,那麼在UIWebView中存在滾動問題,因爲它與其他可滾動視圖無法很好地協作。

+0

類似的問題:HTTP://計算器。com/questions/21929220/show-hide-uitoolbar-match-finger-movement-exactly-as-in-for-example-ios7-s這是非常微妙的做它它像safari .... – Fattie 2014-02-28 20:39:09

回答

0

不能給你一個直接的答案,但看看iWebKit。也許那提供了一個解決方案該演示至少包含一個「全屏」項目。

1

讓UIWebView中的滾動事件有一個委託,當您最初開始滾動UIWebView時,讓UIWebView的高度增加並同時減少Y位置,同時將導航欄沿Y方向向上移動。一旦導航欄完全移出視圖,停止增加UIWebView的大小,並允許正常滾動發生。

這會讓導航欄成爲UIWebView的一部分,因爲它會滾動屏幕。

此外,當您向相反方向滾動並且到達UIWebView內容的頂部時,您需要做相反的處理。

4

基於@布賴恩建議我做了這個代碼:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    CGFloat height = navigationBar.frame.size.height; 
    CGFloat y = scrollView.bounds.origin.y; 
    if (y <= 0) { 
     CGRect frame = navigationBar.frame; 
     frame.origin.y = 0; 
     navigationBar.frame = frame; 
    } else if (tableView.contentSize.height > tableView.frame.size.height) { 
     CGFloat diff = height - y; 
     CGRect frame = navigationBar.frame; 
     frame.origin.y = -y; 
     navigationBar.frame = frame; 

     CGFloat origin = 0; 
     CGFloat h = height; // height of the tableHeaderView 
     if (diff > 0) { 
      origin = diff; 
      h = y; 
     } 
     frame = tableView.frame; 
     frame.origin.y = origin; 
     frame.size.height = tableView.superview.frame.size.height - origin; 
     tableView.frame = frame; 

     CGRect f = CGRectMake(0, 0, tableView.frame.size.width, h); 
     UILabel* label = [[UILabel alloc] initWithFrame:f]; 
     tableView.tableHeaderView = label; 
     [label release]; 
    } 
} 

我的代碼有一個UITableView但應與任何滾動組件工作。如果除了navigationBar和UIScrollView子類之外還有其他組件,則應該更改可滾動組件高度的計算方式。這樣的事情:

frame.size.height = tableView.superview.frame.size.height - origin - otherComponentsHeight; 

我需要添加一個愚蠢tableHeaderView具有所需的行爲。問題是,當scrollViewDidScroll:被調用時,內容有偏移量,但移動Safari中的可見性是內容不會滾動,直到導航條完全消失。我首先嚐試將contentOffset.y更改爲0,但顯然它不起作用,因爲所有代碼都依賴於滾動機制。所以我只是添加了一個tableHeaderView,它的高度恰好是滾動的偏移量,所以頭部永遠不會被看到,並且內容似乎不會滾動,直到導航條完全消失。

如果您不添加啞表tableHeaderView,則可滾動組件會顯示在導航欄後面滾動。

enter image description here

隨着tableHeaderView,所述滾動組件實際上是滾動(如圖滾動條),但由於存在tableHeaderView其高度恰好比滾動偏離相同的,可滾動內容似乎不可以滾動,直到完全的導航欄消失:

enter image description here

+0

我想做的事情與UIWebview相同的效果?我怎樣才能做到這一點?因爲它沒有標題視圖,所以很難。現在我只是移動導航欄,並使網頁視​​圖框架相同,我沒有剪輯子視圖,所以我可以看到仍然和它得到的效果,但它不允許觸摸!所以我不能在頂部滾動,我有些人可能會這樣對我來說可能是一個問題。 – Maximilian 2012-10-06 20:24:44