3 Stimmen

self.view.frame hat die Größe geändert, wenn man sich unerwartet im Querformat befindet

Ich habe die Ansicht des View-Controllers über IB eingerichtet. Die Ansicht ist auf Querformat mit Breite 480 und Höhe 320 eingestellt. Sie wurde im Simulator korrekt geladen. Als ich jedoch self.frame.size mit NSLog überprüfte, stellte ich fest, dass sich die Größe des Rahmens von selbst änderte, ohne dass eine Drehung des Geräts oder ein Code erforderlich war. Hier ist, was ich bekomme:

In viewDidLoad --> Größe = 480 x 320

In viewWillAppear --> Größe = 480 x 320

In viewDidAppear --> Größe = 320 x 480

Ich habe nur Codes in viewDidLoad, aber weder viewWillAppear noch viewDidAppear. Weiß jemand, was hinter der Szene passiert ist? Danke!

0 Stimmen

Im Querformat, ich protokollieren die oben genannten 3 Methoden und es alle sagen, Frame 320x480, nur in viewDidAppear, die Transformation ist (0, -1, 1, 0, 0, 0, 0)

14voto

tc. Punkte 33176

Versuchen Sie so etwas:

NSLog("frame=%@ transform=%@", NSStringFromCGRect(self.frame), NSStringFromCGAffineTransform(self.transform));

Ich bin bereit zu wetten, dass die Transformation die Identität (1,0,0,1,0,0) ist, wenn die Bildgröße 480x320 ist, und eine 90°-Drehung (0,1,-1,0,0,0,0 oder 0,-1,1,0,0,0,0), wenn die Bildgröße 320x480 ist.

Was ist hier los?

Nun, viewDidLoad (und ich denken viewWillAppear) werden aufgerufen, bevor die Ansicht zur Ansichtshierarchie hinzugefügt wird. Wenn sie zur Hierarchie hinzugefügt wird, setzt UIKit auch die Ansichtstransformation, wodurch die Rotation erfolgt.

Aber warum ändert sich dadurch der Rahmen?

Nun, der "Rahmen" ist relativ zu der übergeordneten Ansicht, die das UIWindow ist. Das Fenster dreht sich nicht, die Ansicht des Viewcontrollers schon. Aus der Perspektive des Fensters, ist alles effektiv im Hochformat-Modus.

Sie wollen wahrscheinlich self.view.bounds.

0 Stimmen

Großartige Erklärung! Das ist das erste Mal, dass das für mich wirklich Sinn macht :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X