Per Apple, документы:
Примечание
»... Несмотря на то, что можно установить контроллер Разделить как ребенок в некоторых других контроллерах зрения контейнер, делать не рекомендуется в большинстве случаев контроллеры с раздельным представлением обычно устанавливаются в корне окна вашего приложения. Советы и рекомендации о способах реализации интерфейса см. в Руководстве по интерфейсу iOS для iOS ».
Вы можете получить непредвиденное поведение (и отклонено представление магазина приложений), если вы это сделаете иначе.
Вы можете быть лучше обслуживаться встраивание UITabBarController
как Detail View Controller в UISplitViewController.
Установите переключатель UISplitViewController
.preferredDisplayMode
в .primaryHidden
(скрывает левую 1/3 «Master View», что дает вам полный экран презентации UITabBarController
.) Затем вы можете позвонить showDetailViewController
, чтобы представить свой RegistrationViewController
.
FWIW, у меня была удача встраивания двух UINavigationController
в качестве «Master» и «Detail» из UISplitViewController
и нажатия и отображения в стек навигации для отображения. Большой учебник здесь, с большим количеством дискуссий о преимуществах использования NavControllers: https://www.raywenderlich.com/94443/uisplitviewcontroller-tutorial-getting-started
Некоторого Swift код:
(Используя выше подход, с контроллерами навигационными как Master и детали, показывая только Подробный вид на UISplitViewController,
затем представлении . новый контроллер представления, как Detail View)
@IBAction func createAccountButtonSelected(_ sender: AnyObject) {
let registrationVC = self.storyboard?.instantiateViewController(withIdentifier: "RegistrationViewController") as! RegistrationViewController
self.navigationController?.pushViewController(registrationVC, animated: true)
}
в другом случае, я хотел сбросить навигационные стеки как для главного и подчиненного вида на UISplitViewController
(от Detail View Controller):
let firstVC = self.storyboard?.instantiateViewController(withIdentifier: "FirstViewController") as! FirstViewController
let secondVC = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
// Get a reference the the Master View nav controller
let masterNav = self.splitViewController!.viewControllers[0] as! UINavigationController
// Set desired VC's as nav stack RootViewControllers
self.navigationController?.setViewControllers([matchVC], animated: true)
masterNav.setViewControllers([masterMatchTableView], animated: true)
также см .: http://nshipster.com/uisplitviewcontroller/ –