2013-10-23 72 views
7

通常的故事 - 我正在製作iOS 5/6應用程序在iOS 7下運行,導航欄行爲更改導致問題。隱藏導航欄移動視圖「向上」

該應用程序已經像iOS 7默認設置一樣,具有全屏視圖和半透明的導航欄「over」視圖。問題在於隱藏/取消隱藏導航欄導致iOS 7中的行爲不同。在iOS 5/6上隱藏/取消隱藏導航欄不會更改視圖。在iOS 7上,隱藏欄可視化地移動視圖,在屏幕底部留下一個空白欄並取消隱藏欄,將視圖向下移動佔據整個屏幕(當然,導航欄在頂部)。

我需要繼續支持iOS 5,所以我不使用自動佈局,但我確實使用全屏。 我有一個視圖,我正在查看一個可縮放的圖像 - 所以視圖控制器有一個全屏視圖,其中包含一個包含imageView的scrollView。

狀態欄始終處於隱藏狀態。

我通過導航控制器進入視圖控制器,所以有一個(黑色,半透明)導航欄位於我的全屏視圖/ scrollView/imageView的頂部。

經過短暫的延遲後,某些疊加標籤會消失,並且導航欄被隱藏 只需輕輕一點,即可恢復疊加標籤並取消隱藏導航欄。 這適用於iOS 5/6 - 導航欄從屏幕頂部滑開,露出視圖/圖像的頂部。

在iOS 7上,當導航欄滑出屏幕頂部時,整個視圖在視覺上向上移動相應的數量(即44個點),在屏幕底部留下黑色條。我可以通過在頂層視圖中設置背景顏色並調整足夠大的滾動視圖來查看背景;視圖的頂部確實會移出屏幕,並且背景顏色不會覆蓋屏幕的底部(44點)。

但是,self.view.frame不會更改,並保持在{0,0} 320 x高度。

當我單擊以恢復覆蓋信息和導航欄時,視圖向下移動以佔據全屏,半透明導航欄位於視圖/圖像的頂部。

沒有我試過改變行爲: 更改IB視圖控制器佈局控件(在頂部條形圖下,在底部條形圖下,調整滾動視圖插圖)。在7.0以下運行時,5.1,5.1和7.0的構建都會產生相同的結果。

self.edgesForExtendedLayout = UIRectEdgeNone 

什麼都不做。使用佈局增量值不會執行任何操作。在IB中,當「視爲」iOS 7和iOS 6及更早版本時,視圖看起來相同。我打印出大量的調試信息,但視圖(或滾動視圖)沒有任何內容似乎在視圖「離屏」移動時發生改變。

,顯示了疊加信息(當第一顯示的視圖和在單抽頭運行)的代碼是:

- (void) showOverlayInfo { 
    self.navigationController.navigationBar.barStyle = UIBarStyleBlack; 
    [[[self navigationController] navigationBar] setTranslucent:YES]; 
    [[self navigationController] setNavigationBarHidden:NO animated:NO];  

    overlayInfoHidden = NO; 
    overlayInfoFading = NO; 
    self.infoButton.hidden = NO; 
    self.infoButton.alpha = 1; 
    self.descriptionLabel.hidden = NO; 
    self.descriptionLabel.alpha = 1; 
} 

隱藏疊加信息的代碼是:

- (void) hideOverlayInfo { 
    overlayInfoHidden = YES; 
    overlayInfoFading = NO; 
    self.infoButton.hidden = YES; 
    self.descriptionLabel.hidden = YES; 
    [[self navigationController] setNavigationBarHidden:YES animated:YES]; 
} 

那麼有沒有人可以告訴我我錯過了什麼(大概簡單)?

回答

10

我終於找到了我的問題。

關鍵的事實是圖像查看器視圖控制器在UIPageViewController中,所以我正在查看和試驗的是真正在另一個視圖控制器「內部」。 儘管我禁用了視圖控制器設置爲圖像查看器VC調整滾動視圖插入,但我沒有爲包含創建UIPageViewController的VC創建它,並且UIPageViewController在UIScrollView的某個子類中顯示頁面。當我改變他們的父母VC時,問題就消失了。

所以我覺得這個故事的寓意是:

  • 想想這個問題更加全球化地方時,不會因爲也許你錯過了一些重要的環境中工作。
  • 如果您不想使用iOS 7行爲,請更改您擁有的每個視圖控制器的設置!