ios uitableview ios8 rotation modalviewcontroller

iOS8: evita la rotación al presentar viewController



uitableview rotation (3)

Así que después de largos días de búsqueda e investigación, finalmente se me ocurrió una posible solución.

Antes que nada, puedo usar el controlador de navegación y presionar el control de vista en lugar de presentarlo, pero rompe mi código y no es tan cierto.

Lo segundo que puedo hacer es no establecer restricciones. Todavía puedo usar el autolayout, pero si no establezco restricciones y dejo que se establezcan las restricciones predeterminadas, tableView no se vuelve a cargar. por supuesto, esto tampoco es algo muy inteligente, ya que tengo muchos elementos en mi viewController.

Finalmente, descubrí que puedo mostrar este viewController "modal" en otra UIWindow. Creo UIWindow y establezco modalViewController como su rootViewController.

Puse un ejemplo de proyecto en git: https://github.com/OrenRosen/ModalInWindow

Espero que sea de ayuda.

Tenemos un MainViewController con un tableView, y presenta un nuevo modalViewController.

MainViewController está restringido a solo retrato, y modalViewController puede rotar.

El problema está en iOS8, que cuando el control modalViewController gira, el método de rotación de devolución de llamada en iOS8 en MainViewcontroller se llama - - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator

Por lo tanto, UITableView está volviendo a cargar sus datos, que es un comportamiento que no queremos.

¿Podemos evitar esta característica de iOS 8 y no rotar la presentación de UIViewController?


En iOS 8, la vista que gira cuando cambia la orientación del dispositivo es la primera vista agregada a la UIWindow . Por lo tanto, si guarda una referencia a él en shouldAutorotate presentedController , puede sobreescribir los valores de shouldAutorotate y supportedInterfaceOrientations .


Hice algo similar con un controlador de navegación, que no giraría a menos que el controlador empujado superior gire.

En su caso, verifique si el controlador principal presenta otro controlador. Si no es así, simplemente rechace la rotación; de lo contrario, devuelva lo que devuelve el controlador presentado para el método de rotación.

En cuanto a su vista de tabla, no debería volver a cargarse debido a las rotaciones.