Ich habe eine UIViewController
, die modal präsentiert wird (Vollbild) und ich möchte die Autorotation in dieser Ansicht deaktivieren. Ich möchte es nicht auf Landschaften oder Portraits beschränken, ich möchte nur, dass es in der ursprünglichen Ausrichtung bleibt.Autorotation auf iOS 7 für einen einzelnen präsentierten ViewController deaktivieren
auf iOS 6 war es ausreichend, nur die Methode außer Kraft zu setzen:
- (BOOL)shouldAutorotate {
return NO;
}
Und es tat genau das, was ich wollte. Auf iOS 7 scheint dies jedoch keine Auswirkungen zu haben. Die Methode wird aufgerufen, aber der Rückgabewert scheint vom Betriebssystem ignoriert zu werden - er rotiert automatisch, egal was passiert.
Die Dokumentation erwähnt keine Änderungen an dieser Methode. Wie erreiche ich den gewünschten Effekt auf iOS 7?
Edit: der View-Controller präsentiert wird (nicht gedrückt!) Von einem UINavigationViewController
:
[self.navigationController presentViewController:vc animated:YES completion:nil];
Lösung:
So seltsam es scheinen mag, aber diese Lösung nicht in veröffentlicht wurde die zahlreichen bestehenden Fragen zu diesem Thema. Auf iOS 7 scheint die Antwort die UINavigationController
gibt shouldAutorotate
ist, worauf das OS wirkt. Wir müssen die Klasse UINavigationController
ableiten, um ihr Verhalten zu ändern.
Wenn Sie mit einem normalen Navigationsstapel umgehen, ist es in der Tat ausreichend, nur [self.topViewController shouldAutorotate]
zu verwenden, aber wenn es eine modale Ansicht gibt, befindet es sich in self.presentedViewController
, nicht self.topViewController
. So ist die vollständige Lösung sieht so aus:
- (BOOL)shouldAutorotate {
UIViewController *vc;
if (self.presentedViewController) vc = self.presentedViewController;
else vc = [self topViewController];
return [vc shouldAutorotate];
}
iOS7 verwendet die View-Controller-Methode 'supportedInterfaceOrientations' den Autorotationsprozess zu steuern, so wie frühere Versionen verwendeten' ShouldAutorotateToInterfaceOrientation: 'Sie auch auf Probleme stoßen, wenn Sie präsentieren den View-Controller in einem 'UITabController'. –
Wird Ihr 'UIViewController' in einem' UINavigationController' dargestellt? –
Mögliches Duplikat von http://stackoverflow.com/questions/12520030/how-to-force-a-uiviewcontroller-to-portait-orientation-in-ios-6 –