![enter image description here](https://istack.dev59.com/ZjYjA.webp)
只有当包含主控制器的 navigationController 存在时才会出现这种情况,如果我将其移除,则应用程序将从主控制器开始启动。
需要意识到的是,当一个分割视图控制器应用程序在 iPhone 6 Plus 的纵向模式下启动时,它只会显示折叠状态下的分割视图控制器。默认情况下,详细视图会被推到主要导航控制器中任何视图控制器的上方。
防止在启动时或横屏后(iPhone 或 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作为新的次级视图。
请注意,在这些方法中混合您自己的实现与苹果公司的实现时,它们会做一些疯狂的事情,比如将UINavigationController嵌入到其他UINavigationController中。请参见我在此处给出的相关答案:https://dev59.com/w18e5IYBdhLWcg3wHngs#26090823
更新: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 的答案更好。
这可能是由于 SplitViewController
只在 iPad 上可用所导致的错误。此外,当您将其设置为纵向时,默认情况下会显示详细视图,并且主视图将以栏的形式显示。您需要使用一些方法进行更改,比如 splitViewController:shouldHideViewController:inOrientation
以下是苹果文档中涉及到您的问题的链接
希望这能帮到你!