IOS8 - предотвращает поворот при представлении viewController
У нас есть MainViewController с tableView, и он представляет новый modalViewController.
MainViewController ограничивается только портфолио, и modalViewController может вращаться.
Проблема в iOS8 заключается в том, что когда modalViewController вращается, метод обратного вызова вращения в iOS8 в MainViewcontroller вызывается - - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
Таким образом, UITableView перезагружает свои данные, чего мы не хотим.
Можем ли мы предотвратить эту функцию iOS 8 и не поворачивать отображающий UIViewController?
Ответы
Ответ 1
Итак, после долгих дней поиска и расследования я наконец придумал возможное решение.
Прежде всего, я могу использовать контроллер навигации и нажимать viewController вместо его представления, но он прерывает мой код, и это не так.
Вторая вещь, которую я могу сделать, - это не устанавливать ограничения. Я все еще могу использовать автозапуск, но если я не задаю ограничений и не устанавливаю ограничения по умолчанию, таблицаView не будет перезагружена. конечно, это тоже не очень умная вещь, потому что у меня много элементов в моем контролере просмотров.
Наконец, я понял, что могу показать этот "модальный" viewController в другом UIWindow. Я создаю UIWindow и устанавливаю modalViewController как свой rootViewController.
Я привел пример проекта в git:
https://github.com/OrenRosen/ModalInWindow
Надеюсь, это будет полезно.
Ответ 2
Я сделал что-то похожее с навигационным контроллером, который не вращается, если верхний толкаемый контроллер не вращается.
В вашем случае проверьте, представит ли главный контроллер другой контроллер. Если это не так, просто отклоните вращение, в противном случае верните все возвращаемые контроллером данные для метода вращения.
Что касается вашего вида таблицы, он не должен перезагружаться из-за поворота.
Ответ 3
В iOS 8 вид, который вращается при изменении ориентации устройства, - это первое представление, добавленное к UIWindow
. Итак, если вы сохраните ссылку на нее в своем presentedController
, вы можете перезаписать значения shouldAutorotate
и supportedInterfaceOrientations
.