UISplitViewController 在纵向显示细节上方的主视图

UISplitViewController display master view above detail in portrait orientation

我在 UINavigationController 中嵌入了一个 UISplitViewController,它带有一个 UINavigationItem 按钮,用于切换纵向主视图的显示。当视图首次以纵向加载时,我想在细节视图上方显示主视图。

我发现的任何类似示例都显示主视图和细节视图以纵向方向拆分屏幕,但我需要细节视图以纵向全屏显示,并且在 UISplitViewController 首次加载时主视图覆盖细节视图(就好像主视图已从左侧滑出一样)。有人知道怎么做吗?

编辑:这不是重复的。答案在评论中发现。解决方案是在 UISplitViewController 上使用 preferredDisplayMode 并将其设置为 UISplitViewControllerDisplayModePrimaryOverlay

将原始答案留给评论和后代。


原答案

这是一个副本:UISplitViewController in portrait on iPhone shows detail VC instead of master

作为参考,这种情况下的解决方案是让实现 UISplitViewControllerDelegate 的视图控制器使用以下代码:

- (BOOL)splitViewController:(UISplitViewController *)splitViewController
collapseSecondaryViewController:(UIViewController *)secondaryViewController
  ontoPrimaryViewController:(UIViewController *)primaryViewController {

    if ([secondaryViewController isKindOfClass:[UINavigationController class]]
        && [[(UINavigationController *)secondaryViewController topViewController] isKindOfClass:[DetailViewController class]]
        && ([(DetailViewController *)[(UINavigationController *)secondaryViewController topViewController] detailItem] == nil)) {

        // Return YES to indicate that we have handled the collapse by doing nothing; the secondary controller will be discarded.
        return YES;

    } else {

        return NO;

    }
}

或者您可以使用:

    - (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController: (UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation {

    //  Force master view to show in portrait and landscape

    return NO;
}