Ich habe eine iPhone-App, die eine UINavigationController
Drilldown-Oberfläche verwendet: Zuerst eine Ansicht, dann eine andere, bis zu vier Ebenen tief. Ich möchte, dass die ersten drei Ansichten auf die Ausrichtung im Hochformat beschränkt sind und nur die letzte Ansicht im Querformat gedreht werden darf. Bei der Rückkehr von der vierten zur dritten und vierten Ansicht im Querformat möchte ich, dass sich alles wieder im Hochformat dreht.
In iOS 5 habe ich einfach shouldAutorotateToInterfaceOrientation:
in jedem meiner Ansichts-Controller definiert, dass für die zulässigen Ausrichtungen JA zurückgegeben werden soll. Alles funktionierte wie oben beschrieben, einschließlich der Rückkehr zum Hochformat, auch wenn das Gerät bei der Rückkehr von View Controller Nr. 4 zu Nr. 3 im Querformat gehalten wurde.
In iOS 6 drehen sich alle View-Controller in den Querformat und brechen diejenigen, die nicht dazu gedacht waren. In den Versionshinweisen zu iOS 6 heißt es
Es wird mehr Verantwortung auf die App und den App-Delegierten übertragen. Jetzt
UINavigationController
konsultieren iOS-Container (z. B. ) ihre Kinder nicht mehr, um festzustellen, ob sie eine Autorotation durchführen sollen. [...] Das System fragt den obersten Vollbild-View-Controller (normalerweise den Root-View-Controller) nach seinen unterstützten Schnittstellenausrichtungen, wenn sich das Gerät dreht oder wenn einem View-Controller der modale Vollbild-Präsentationsstil präsentiert wird. Darüber hinaus werden die unterstützten Ausrichtungen nur abgerufen, wenn dieser Ansichtscontroller von seinershouldAutorotate
Methode JA zurückgibt . [...] Das System ermittelt, ob eine Ausrichtung unterstützt wird, indem es den von der App-supportedInterfaceOrientationsForWindow:
Methode zurückgegebenen Wert mit dem von dersupportedInterfaceOrientations
Methode des obersten Vollbild-Controllers zurückgegebenen Wert schneidet .
Also habe ich eine Unterklasse erstellt UINavigationController
, meine MainNavigationController
boolesche Eigenschaft angegeben landscapeOK
und diese verwendet, um die zulässigen Ausrichtungen in zurückzugeben supportedInterfaceOrientations
. Dann habe ich in jeder viewWillAppear:
Methode meiner View Controller eine Zeile wie diese
[(MainNavigationController*)[self navigationController] setLandscapeOK:YES];
um mir MainNavigationController
das gewünschte Verhalten zu sagen .
Hier kommt die Frage: Wenn ich jetzt im Hochformat zu meiner vierten Ansicht navigiere und das Telefon umdrehe, dreht es sich in Querformat. Jetzt drücke ich die Zurück-Taste, um zu meiner dritten Ansicht zurückzukehren, die nur im Hochformat funktionieren soll. Aber es dreht sich nicht zurück. Wie mache ich das?
Ich habe es versucht
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait]
in der viewWillAppear
Methode meines dritten View Controllers, aber es macht nichts. Ist dies die falsche Methode zum Aufrufen oder vielleicht der falsche Ort zum Aufrufen oder sollte ich das Ganze auf eine völlig andere Art und Weise implementieren?