2014-09-05 82 views
3

在我們的應用程序中,有很多地方需要快速彈出視圖控制器沒有動畫,然後推動一個新的動畫。我們會做類似iOS 8:UINavigationController彈出沒有動畫,然後推

[navController popViewControllerAnimated:NO]; 
[navController pushViewController:newVC animated:YES]; 

預iOS8上,這個工作得很好,並動畫顯示在當前一個滑動在新的視圖控制器,因爲導航控制器首先彈出沒有動畫。

現在與iOS8,這似乎已經改變,現在發生的事情是頂部視圖控制器被彈出,基礎視圖控制器閃爍一秒鐘,然後新的視圖控制器被推上。我從頭開始爲iOS8創建了一個Xcode項目,並試圖對此進行測試。 Please see this GIF來演示它的外觀。每次我們點擊分割視圖主側的按鈕之一時,我們都會在分割的細節(右側)執行上述兩行代碼。請注意,灰色視圖(這是導航控制器的根目錄)會在按下新視圖之前短暫閃爍一秒。

我試圖尋找任何原因,爲什麼這可能在iOS8中發生了變化,但我似乎無法找到任何文檔。任何人對可能導致這種變化的原因有什麼想法?任何投入將不勝感激!

而且,我試圖與代碼玩耍,發現執行以下代碼,而不是

NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:navController.viewControllers]; 
[viewControllers removeLastObject]; 
[viewControllers addObject:newVC]; 
[navController setViewControllers:viewControllers animated:YES]; 

似乎解決這個問題。不過,如果可能的話,我寧願不要使用它,因爲我們的應用程序中有很多地方可以做這種雙線彈出式組合,我寧願不必在整個地方改變它。

謝謝!

+2

在我看來,iOS8實際上做得很對,無論你在iOS8之前看到的是什麼,都可能是沒有意義的。 – Mike 2014-09-05 18:51:02

+0

我發現,即使我做推動然後流行,我仍然得到時髦的動畫。 – Chris 2014-09-11 23:17:43

+0

您是否找到有關此問題的原因或解決方案?請更新。 – 2014-09-29 16:22:54

回答

1

我想出了類似的解決方案給你,第一個是情境然而。

首先,您可以覆蓋您操作的堆棧中的後退按鈕,以彈出到根目錄(或任何您想要作爲根目錄的控制器)。其次,你可以添加一個類別到UINavigationController,基本上實現你上面列出的代碼。這將使您無需在應用程序的任何地方更改它。

-(UIViewController *)popPushViewController:(UIViewController *)controller animated:(BOOL)animated { 
    NSMutableArray *viewControllers = [NSMutableArray arrayWithArray:self.viewControllers]; 
    [viewControllers removeLastObject]; 
    [viewControllers addObject:controller]; 
    [self setViewControllers:viewControllers animated:animated]; 
} 

我打算實施後者,如果蘋果不解決它/迴應。

相關問題