Deaktivieren Sie die Autorotation auf iOS 7 für einen einzelnen präsentierten ViewController

8

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 :

dargestellt (nicht gedrückt!) %Vor%

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:

%Vor%     
SaltyNuts 28.03.2014, 14:46
quelle

2 Antworten

5

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.

%Vor%

Also statt dies zu tun, ist viewController Ihr Objekt, das NO für shouldAutorotate zurückgibt.

%Vor%

Sie würden stattdessen CustomNavigationController verwenden

%Vor%     
Clever Error 28.03.2014 15:38
quelle
-1
%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.

    
user3344236 28.03.2014 15:03
quelle