2 Stimmen

"didRotateFromInterfaceOrientation:" nicht aufgerufen

Ich versuche, einer Ansicht einer Controller-View in einer kleinen Ansicht der Hauptansicht hinzuzufügen. Allerdings wird die didRotateFromInterfaceOrientation: Methode des Untercontrollers nicht aufgerufen, sodass ich keine Änderungen für die Orientierungsänderung vornehmen kann.

17voto

Nick Punkte 1159

DidRotateFromInterfaceOrientation wird nur aufgerufen (im childViewController), wenn Sie den childViewController dem parentViewController hinzufügen, wie hier:

[parentViewController addChildViewController:childViewController];

Beachten Sie, dass Sie dieses Verhalten immer noch mit einer Eigenschaft ein- oder ausschalten können:

self.automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers

Standardmäßig ist es auf YES gesetzt, sodass Sie in Ihrem Fall nichts ändern müssen. Nach iOS 6.0 veraltet Prost

5voto

Carter Punkte 4702

Haben Sie mehr als 1 UIViewController, der gleichzeitig seine Ansicht auf dem Bildschirm anzeigt? iOS erwartet wirklich nur 1 Ansicht, die zu einem UIViewController gehört, auf dem Bildschirm gleichzeitig. Wenn es mehr als 1 gibt, werden nur die Orientierungswechselmethoden des UIViewController aufgerufen, dessen Ansicht im Vollbildmodus ist.

2voto

Bryon Punkte 861

Ich wollte nur eine Nachfolgemeldung zu dieser Frage posten. Nach iOS 8 wurden die Drehmethoden veraltet und stattdessen überschreiben Sie viewWillTransitionToSize() im Kind-View-Controller.

HINWEIS: Diese Methode scheint tatsächlich erforderlich zu sein, um den Kind-View-Controller wie oben beschrieben hinzuzufügen. Ich habe meinen Test mit einem Storyboard und einem NavigationController erstellt und habe einen neuen View-Controller aufgerufen, als eine Schaltfläche gedrückt wurde.

Ich habe einen Haltepunkt in dieser Funktion gesetzt und als ich den Debugger verwendete, um zu inspizieren: self->parentViewController->childViewControllers, war childViewControllers null.

1voto

Irfanlone Punkte 544

Ich hatte das gleiche Problem. Grundsätzlich wird das

didRotateFromInterfaceOrientation:

für den Root-/Eltern-View-Controller aufgerufen. Wenn Sie erwarten, dass diese Methode für einen View-Controller aufgerufen wird, dann muss es sich um einen Unter-View-Controller des aktuellen Root-View-Controllers handeln.

 [self addChildViewController:YourUIViewController];

1voto

Harry Punkte 141

Nach dem Apple-Dokument "Wenn eine Rotation für einen sichtbaren Ansichtscontroller auftritt, werden die Methoden willRotateToInterfaceOrientation:duration:, willAnimateRotationToInterfaceOrientation:duration: und didRotateFromInterfaceOrientation: während der Rotation aufgerufen. Die Methode viewWillLayoutSubviews wird auch aufgerufen, nachdem die Ansicht von ihrem Elternelement angepasst und positioniert wurde. Wenn ein Ansichtscontroller nicht sichtbar ist, wenn eine Änderung der Ausrichtung auftritt, werden die Rotationsmethoden nie aufgerufen. Die Methode viewWillLayoutSubviews wird jedoch aufgerufen, wenn die Ansicht sichtbar wird. Ihre Implementierung dieser Methode kann die Methode statusBarOrientation aufrufen, um die Ausrichtung des Geräts zu bestimmen."

Aber tatsächlich werden selbst wenn die Ansicht sichtbar ist, aus irgendeinem Grund (vielleicht weil die Ansicht nicht den gesamten Bildschirm einnimmt?) die entsprechenden Rotations-Delegate-Methoden des zugehörigen Ansichtscontrollers nicht aufgerufen. Das Überschreiben von -viewWillLayoutSubviews könnte in einigen Fällen als Workaround dienen.

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