iOS 5: willRotateToInterfaceOrientation: Dauer wird beim ersten Laden des Controllers nicht aufgerufen

8

Ich habe diese Methode in meinem Code implementiert, um zu wissen, wann eine Änderung der Schnittstellenausrichtung auftreten wird:

%Vor%

Ich verlasse mich darauf, um meine Ansichten zu erstellen. In iOS 4 oder 5 wird es korrekt aufgerufen, wenn sich die Ausrichtung ändert .

In iOS 4 wird es auch aufgerufen, wenn der Controller das erste Mal lädt (unabhängig davon, ob sich die Ausrichtung ändert oder nicht, wird es am Anfang mit der richtigen Ausrichtung aufgerufen).

Das Problem ist mir in iOS 5 aufgefallen, das passiert nicht mehr. Die Methode wird aufgerufen, wenn sich die Ausrichtung ändert, nicht jedoch beim Laden des Controllers. Dies ist ein Problem für mich, weil ich darauf angewiesen bin, die anfängliche Ansichtsplazierung basierend auf der Ausrichtung einzurichten.

Irgendwelche Ideen, warum sich dieses Verhalten geändert hat? Was ist der beste Weg, damit umzugehen? Sollte ich überprüfen, was die Ausrichtung in ViewDidLoad ist, wenn auf iOS 5 und dann manuell die Methoden writRotate und didRotate aufrufen? Das fühlt sich ein bisschen wie ein Hack an.

Danke für jede Eingabe, die Sie zur Verfügung stellen können.

    
nebs 04.11.2011, 22:35
quelle

4 Antworten

15

Da ich auf Zeit gedrückt bin, musste ich dieses seltsame Verhalten umgehen und manuell die Ausrichtungsmethoden in viewDidLoad aufrufen. Dies ist ein bisschen ein Hack, aber es funktioniert soweit gut.

In viewDidLoad habe ich Folgendes hinzugefügt:

%Vor%

Ich habe das dann in einer gemeinsamen Header-Datei hinzugefügt:

%Vor%

Ich habe die Überprüfung der iOS-Version definiert von einer Antwort auf diese Frage auf SO .

    
nebs 07.11.2011, 20:16
quelle
1

Auch ich hatte ein ähnliches Problem und musste es in der abgeleiteten Klasse tabbarcontroller übersteuern, um dies zum Laufen zu bringen:

%Vor%

Hoffe das hilft !!

    
Ramanand 08.11.2011 05:02
quelle
1

Ich bin auf dasselbe Problem gestoßen und habe mir die Haare ausgezogen. Ich habe endlich eine Lösung gefunden, aber leider wird das nur iOS 5.0 + sein:

Platzieren Sie den folgenden Code in Ihrer viewDidLoad -Methode in Ihrer benutzerdefinierten UIViewController :

%Vor%

Dies wird das Rotationsupdate auf die nächste Laufschleife schieben. attemptRotationToDeviceOrientation ist ein iOS 5.0+ Anruf.

    
Maurizio 02.03.2012 17:38
quelle
1

Seit iOS 5 und höher sollten Sie Ihre View-Controller-Hierarchie erstellen (mit -addChildViewController: ). Dann beginnen Kindersicht-Controller, -willRotateToInterfaceOrientation: interfaceOrientation: und andere Schnittstellenmethoden erneut aufzurufen (weil der übergeordnete Controller sie über Änderungen der UI-Orientierung informiert).

Bitte verwenden Sie keine "schmutzigen" Methoden.

Nützliche Dokumentation: Apple-Dokumentation über 'addChildViewController:'

    
Vladlex 25.01.2013 20:45
quelle

Tags und Links