Портрет UISplitViewController для поворота на пейзаж отключен в iOS 8, когда появился popover

Хорошо, это странно.

В iOS 8, если popover отображается с мастер-панели в UISplitViewController, а в портрете, вращение отключено. Я проверил множество тестов и подтвердил, что это так.

Существует частный метод в UISplitViewController, _shouldPreventAutorotation, который вызывается при вращении и проверяет свойство presentationController на контроллере контента popover. Если это возвращает значение, отличное от нуля, вращение отключено. Если вы переопределите свойство и верните нуль, поворот снова будет включен.

Кто-нибудь знает, почему это поведение было добавлено в iOS 8?

Я загрузил тестовый проект, демонстрирующий это поведение здесь .

Итак, после некоторого расследования и декомпиляции в Hopper существует частный метод в UISplitViewController, который вызывается, когда устройство повернуто, что определяет, следует ли отключать ротацию.

Если мастер-панель видна, на главной панели есть дочерний контроллер модального представления (в данном случае – popover), а свойство presentationController представленного popover возвращает значение, отличное от нуля, тогда вращение отключено.

Я могу переопределить это поведение, переопределив -представляя контроллер на контроллере popover и возвращая нуль. Не уверен в каких-либо побочных эффектах, но он работает.

- (UIPresentationController *)presentationController { return nil; } 
Interesting Posts
Давайте будем гением компьютера.