2015-02-13 15 views
5

Ok, to jest dziwne.UISplitViewController portret do rotacji krajobrazu wyłączony w iOS 8, gdy popover przedstawił

W iOS 8, jeśli popover jest prezentowany z panelu głównego w UISplitViewController podczas portretu, obrót jest wyłączony. Przeprowadziłem szereg testów i potwierdziłem, że tak właśnie jest.

Istnieje metoda prywatna na UISplitViewController, _shouldPreventAutorotation, która jest wywoływana podczas obracania i kontroluje właściwość presentationController na kontrolerze treści popover. Jeśli to zwróci wartość inną niż zero, obrót jest wyłączony. Jeśli zastąpisz właściwość i zwrócisz zero, ponownie włączasz obrót.

Czy ktoś ma pojęcie, dlaczego to zachowanie zostało dodane w systemie iOS 8?

Załadowałem projekt testowy, który demonstruje to zachowanie here.

+0

czy znalazłeś jakieś rozwiązanie? –

+0

Tak, wysłałem rozwiązanie, które znalazłem poniżej. –

+0

Twoje rozwiązanie powoduje odrzucenie widoku, chcę obrócić widok. –

Odpowiedz

7

Tak więc, po dalszych badaniach i dekompilacji w Hopper, na UISplitViewController znajduje się prywatna metoda, która jest wywoływana po obróceniu urządzenia, która określa, czy należy wyłączyć rotację.

Jeśli panel główny jest widoczny, panel główny ma kontroler widoku modalnego podrzędnego (w tym przypadku popover), a właściwość presentationController prezentowanego popover zwraca wartość zerową, a następnie obrót jest wyłączony.

Mogę zastąpić to zachowanie przez nadpisanie -presentationController na kontrolerze popover i return zero. Nie wiesz jeszcze o żadnych działaniach niepożądanych, ale działa.

- (UIPresentationController *)presentationController { 
    return nil; 
} 
+0

W jaki sposób to rozwinęło się dla Ciebie, czy możemy w związku z tym stanąć w obliczu odrzucenia sklepu z aplikacjami. –

+1

Nie, to nie korzysta z żadnych prywatnych interfejsów API, więc jest bezpieczny dla App Store. Mieliśmy to w sklepie od kilku lat bez żadnych problemów. –

+0

Dziękuję .. za pomoc tutaj. –

Powiązane problemy