Итак, у меня есть UIPageViewController, в котором я хочу, чтобы spineLocation был .mid, если устройство находится в альбомной ориентации, и .min для портретной, поэтому отображаются два контроллера в альбомной и один в портретной ориентациях.
В делегат контроллера представления страницы Я реализовал эту функцию:
func pageViewController(_ pageViewController: UIPageViewController, spineLocationFor orientation: UIInterfaceOrientation) -> UIPageViewController.SpineLocation {
if orientation == .landscapeLeft || orientation == .landscapeRight {
return .mid
} else {
return .min
}
}
В моем классе UIPageViewController для установки контроллеров представления у меня есть эта функция:
func setControllers() {
var controllers: [UIViewController] = [controller1]
if spineLocation == .mid {
controllers.append(controller2)
}
setViewControllers(controllers, direction: .forward, animated: true, completion: nil)
}
Моя проблема в том, что я не уверен где его поместить, я попытался:
- viewDidLoad (перед настройкой делегата pageController)
- viewDidLoad (после настройки делегата pageController)
- viewWillTransition (для размера: CGSize, с координатором: UIViewControllerTransitionCoordinator)
- didRotate (из fromInterfaceOrientation: UIInterfaceOrientation)
- willRotate (toInterfaceOrientation: UIInterfaceOrientation, длительность: показано 1020 * * * 10 * 10 * * 10 * 10 *) правильно в портретном режиме, но когда я запускаю или поворачиваю устройство andscape приложение аварийно завершает работу для:
*** Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «Количество предоставленных контроллеров представления (1) не соответствует требуемому числу (2) для запрошенного расположение позвоночника (UIPageViewControllerSpineLocationMid) '