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.
Antworten
Zu viele Anzeigen?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
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.
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.
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];
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.
- See previous answers
- Weitere Antworten anzeigen