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;
}