iPad UISplitView Контроллер Phantom Master View Controller
В поисках решения проблемы авторотации с использованием UISplitViewController. Шаги для воссоздания:
- Используя Xcode 4.5+ и iOS6+ SDK, создайте новый проект с помощью шаблона "Приложение Master-Detail: шаблон.
- Добавьте новый контроллер представления в проект с файлом XIB, который является полноэкранным по размеру.
- Добавьте кнопку в контроллер подробного представления, который представляет новый полноэкранный контроллер представления, используя -presentViewController: animated: завершение:
- Добавьте кнопку в новый контроллер представления, который отклоняет себя, используя dismissViewControllerAnimated: завершение:
- Запустите приложение с iPad в альбомном режиме и нажмите кнопку, созданную на шаге 3, в подробном представлении, представляющем новый контроллер представления.
- При просмотре контроллера полноэкранного просмотра поверните iPad в портретное положение, а затем нажмите кнопку, добавленную на шаге 4, чтобы закрыть новый контроллер просмотра.
ПРОБЛЕМА: Используя эти шаги, и главный и подробный контроллеры вида будут автоматически вращаться, но главный контроллер вида останется на экране в не отвечающем состоянии и займет кадр в верхнем левом углу экрана, который имеет тот же размер, что и это было в ландшафтном режиме. С помощью жеста с левой стороны iPad будет отображен правильный контроллер основного вида, и проблема будет устранена.
Мы смогли использовать viewWillAppear и viewDidDisappear в новом контроллере вида, чтобы скрыть контроллер фантомного главного вида, но даже после этого исправления кнопка "Мастер", которую шаблон предоставляет в портретном режиме, не отвечает после выполнения вышеуказанных шагов, и мы проследили, что область экрана в левом верхнем углу, занятая главным контроллером вида до исправления, не реагирует на прикосновения.
Мы предприняли несколько попыток отставки первого респондента различными способами, но нам не повезло полностью решить проблему.
ПРИМЕЧАНИЕ. Эта проблема обычно возникает только в том случае, если вышеуказанные шаги 5-6 выполняются при первом запуске приложения. Повторение шага 6 в рамках одного запуска приложения обычно не приводит к проблеме каждый раз. Это повторяется при каждом запуске приложения.
1 ответ
Нашел исправление для этого.
- Установите модальный стиль представления контроллера представления в UIModalPresentationPageSheet до вызова presentViewController:animated: завершение:.
- Затем выполнил переопределение метода контроллеров представления -viewWillLayoutSubviews, чтобы вручную установить границы суперпредставления в соответствии с размером экрана, 768x1004 для портрета и 1024x748 для ландшафта.