Подтвердить что ты не робот

IOS8 - предотвращает поворот при представлении viewController

У нас есть MainViewController с tableView, и он представляет новый modalViewController.

MainViewController ограничивается только портфолио, и modalViewController может вращаться.

Проблема в iOS8 заключается в том, что когда modalViewController вращается, метод обратного вызова вращения в iOS8 в MainViewcontroller вызывается - - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator

Таким образом, UITableView перезагружает свои данные, чего мы не хотим.

Можем ли мы предотвратить эту функцию iOS 8 и не поворачивать отображающий UIViewController?

4b9b3361

Ответ 1

Итак, после долгих дней поиска и расследования я наконец придумал возможное решение.

Прежде всего, я могу использовать контроллер навигации и нажимать viewController вместо его представления, но он прерывает мой код, и это не так.

Вторая вещь, которую я могу сделать, - это не устанавливать ограничения. Я все еще могу использовать автозапуск, но если я не задаю ограничений и не устанавливаю ограничения по умолчанию, таблицаView не будет перезагружена. конечно, это тоже не очень умная вещь, потому что у меня много элементов в моем контролере просмотров.

Наконец, я понял, что могу показать этот "модальный" viewController в другом UIWindow. Я создаю UIWindow и устанавливаю modalViewController как свой rootViewController.

Я привел пример проекта в git: https://github.com/OrenRosen/ModalInWindow

Надеюсь, это будет полезно.

Ответ 2

Я сделал что-то похожее с навигационным контроллером, который не вращается, если верхний толкаемый контроллер не вращается.

В вашем случае проверьте, представит ли главный контроллер другой контроллер. Если это не так, просто отклоните вращение, в противном случае верните все возвращаемые контроллером данные для метода вращения.

Что касается вашего вида таблицы, он не должен перезагружаться из-за поворота.

Ответ 3

В iOS 8 вид, который вращается при изменении ориентации устройства, - это первое представление, добавленное к UIWindow. Итак, если вы сохраните ссылку на нее в своем presentedController, вы можете перезаписать значения shouldAutorotate и supportedInterfaceOrientations.