UISplitViewController отображает главный вид выше детали в портретной ориентации

У меня есть UISplitViewController, встроенный в UINavigationController с кнопкой UINavigationItem, чтобы переключить отображение основного вида в портретной ориентации. Я хочу показать главный вид над подробным видом, когда вид сначала загружается в портретной ориентации.

Любые похожие примеры, которые я обнаружил, показывают главный и подробный виды, разделяющие экран в портретной ориентации, но мне нужно, чтобы подробный вид был полноэкранным в портретном, а главный вид покрывал подробный вид при первой загрузке UISplitViewController (как будто главный вид был сильно ударил слева). Кто-нибудь знает как это сделать?

2 ответа

Решение

Изменить: это не дубликат. Ответ обнаружен в комментариях. Решение заключается в использовании preferredDisplayMode на UISplitViewController и установите его в UISplitViewControllerDisplayModePrimaryOverlay

Оставил оригинальный ответ для контекста в комментариях и потомстве.


Оригинальный ответ

Это дубликат этого: UISplitViewController в портретном на iPhone показывает подробный VC вместо главного

Для справки, решение в этом случае состояло в том, чтобы иметь контроллер представления, который реализует 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;
}
Другие вопросы по тегам