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.
Auf iOS 6 war es ausreichend, die Methode einfach zu überschreiben:
%Vor%Und es hat genau das gemacht, was ich wollte. Auf iOS 7 scheint dies jedoch keine Auswirkungen zu haben. Die Methode wird zwar aufgerufen, aber der Rückgabewert scheint vom Betriebssystem ignoriert zu werden - er rotiert automatisch, egal was passiert.
In der Dokumentation werden keine Änderungen an dieser Methode erwähnt. Wie kann ich unter iOS 7 den gewünschten Effekt erzielen?
Edit: Der View-Controller wird von einem UINavigationViewController
:
Lösung:
So seltsam es auch erscheinen mag, aber diese Lösung wurde nicht in den zahlreichen vorhandenen Fragen zu diesem Thema veröffentlicht. Auf iOS 7 scheint es die Antwort zu sein, die UINavigationController
gibt
shouldAutorotate
ist die Funktion des Betriebssystems. Wir müssen die Klasse UINavigationController
ableiten, um ihr Verhalten zu ändern.
Wenn Sie mit einem normalen Navigationsstapel arbeiten, ist es in der Tat ausreichend, [self.topViewController shouldAutorotate]
zu verwenden, aber wenn es eine modale Ansicht gibt, liegt sie in self.presentedViewController
, nicht in self.topViewController
. Daher sieht die vollständige Lösung folgendermaßen aus:
Also habe ich gerade den Code ausprobiert und es hat funktioniert, was mich zu der Annahme verleitet hat, dass du deine UIViewController
in UINavigationController
präsentierst. Aus irgendeinem Grund hat iOS 7 geändert, wie UINavigationController
Drehungen behandelt.
Die einfachste Lösung besteht darin, eine Unterklasse von UINavigationController
zu erstellen, die die Methode shouldAutorotate
überschreibt und den Wert von topViewController zurückgibt.
Also statt dies zu tun, ist viewController
Ihr Objekt, das NO
für shouldAutorotate
zurückgibt.
Sie würden stattdessen CustomNavigationController verwenden
%Vor%Siehe Wie programmiere ich die Geräteausrichtung in iOS7?
Aber nehmen Sie den Fall, dass Sie diese Methode verwenden, da es eine private API ist und Ihre App möglicherweise von Apple abgelehnt wird. Also, vielleicht ist es besser, die Orientierung von Project details - & gt; Allgemein - & gt; Registerkarte Deployment-Info, wählen Sie nur die Option Querformat links und Querformat rechts. Dies kann ein besserer Ansatz sein, wenn alle Ihre Ansichten nur eine Art von Orientierung benötigen.
Tags und Links objective-c ios cocoa-touch uiviewcontroller