2014-07-12 28 views
11

我目前正在開發iOS 8並開發具有新自適應框架的應用程序。奇怪的部分是,當我在iPhone上使用這個storyboard配置的splitviewcontroller時,應用程序不會以主視圖控制器而是細節控制器啓動。這是一個錯誤,我怎麼能夠解決它? enter image description here在iPhone上使用splitviewcontroller首先描繪細節視圖

如果籠罩着主的navigationController存在,這並不只發生,如果我刪除了應用程序啓動與主控制器。

+0

您是否找到任何解決方案?即使我面臨同樣的問題。 –

+0

我還沒找到解決問題的辦法。我從WWDC的視頻中記得,分割視圖在內部管理主視圖和詳細視圖中的導航控制器之間的移動。最有可能的是它是一個錯誤,因爲即使黑客都阻止了這種行爲。但我可能是錯的。 –

回答

0

這可能是由於SplitViewController僅僅是iPad專有的錯誤。此外,當您使用縱向方向時,它會默認顯示詳細視圖,並且主視圖將顯示爲條形。你將不得不使用一些方法,它改變像splitViewController:shouldHideViewController:inOrientation

下面是蘋果的文件提到你的問題

https://developer.apple.com/library/ios/documentation/uikit/reference/UISplitViewController_class/Reference/Reference.html

我希望這有助於!

+0

非常感謝您的回答 –

+2

這個答案已經過時 - UISplitViewController不再是iOS 8的獨家版本,並且按照您最初發布的方式使用它是正式推薦的通用應用程序,適用於需要iPad上的分割視圖(以及iPhone 6加號)。 – Marco

4

更新:Michael Wybrow的回答比較好。

我就遇到了這個問題,並發現這個工作:

splitViewController.viewControllers = 
    UIScreen.mainScreen.traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassCompact ? 
    @[ leftNavigationController ] : 
    @[ leftNavigationController, rightNavigationController ] 
; 

而在SPLITVIEW委託:

- (UIViewController *)primaryViewControllerForCollapsingSplitViewController:(UISplitViewController *)splitViewController 
{ 
    return leftNavigationController; 
} 

- (UIViewController *)primaryViewControllerForExpandingSplitViewController:(UISplitViewController *)splitViewController 
{ 
    return leftNavigationController; 
} 

- (UIViewController *)splitViewController:(UISplitViewController *)splitViewController separateSecondaryViewControllerFromPrimaryViewController:(UIViewController *)primaryViewController 
{ 
    return rightNavigationController; 
} 

這太可怕了,我知道了。但它確實是正確的,特別是在iPhone 6 Plus上,這很難做到。

更新:Michael Wybrow的回答比較好。

10

要認識到的是,當一個拆分視圖控制器應用在縱向上的iPhone 6 Plus上啓動時,它只是顯示在其摺疊狀態的拆分視圖控制器。默認情況下,這會將詳細視圖推送到主導航控制器中的任何視圖控制器之上。

停止某個特定視圖(例如,您最初可能在iPad上顯示的空白細節視圖)從啓動時顯示或實際旋轉到縱向後,要在splitViewController中處理此操作:collapseSecondaryViewController:ontoPrimaryViewController :委託方法。這將在演示前在iPhone或iPhone 6 Plus上縱向發佈。

這樣做,你不應該有任何設備特定的代碼。

最簡單的形式,這將是這樣的:

- (BOOL)splitViewController:(UISplitViewController *)splitViewController collapseSecondaryViewController:(UIViewController *)secondaryViewController ontoPrimaryViewController:(UIViewController *)primaryViewController 
{ 
    if ([secondaryViewController isKindOfClass:[BlankViewController class]]) 
    { 
     // If our secondary controller is blank, do the collapse ourself by doing nothing. 
     return YES; 
    } 

    // Otherwise, use the default behaviour. 
    return NO; 
} 

很明顯,那麼你需要做相反的splitViewController:separateSecondaryViewControllerFromPrimaryViewController:創建並返回一個BlankViewController新的輔助視圖,如果你不希望最頂級的主視圖控制器在分割視圖展開後在細節方面結束。

注意混合自己的實現與蘋果在這些方法中,他們做一些瘋狂的東西像其他UINavigationControllers內嵌入UINavigationControllers。在這裏看到我的相關答案:https://stackoverflow.com/a/26090823/4089333

相關問題