16 Stimmen

Wie erzwingt man eine Bildschirmausrichtung in bestimmten Ansichtscontrollern?

Meine Anwendung ist ziemlich einfach: Sie startet mit einem Ansichtscontroller, der eine Tabelle (im gruppierten Ansichtsmodus) mit einigen Optionen enthält. Wenn der Benutzer auf eine der Optionen tippt, schiebe ich einen anderen Ansichtscontroller auf meinen Navigationscontroller.

Dieser zweite Ansichtscontroller zeigt einfach ein UIImageView an, und der Benutzer kann die Bildschirmorientierung auf diesem Ansichtscontroller zwischen Hoch- und Querformat ändern. Dies funktioniert einwandfrei und alles ist zufriedenstellend.

Wenn der Benutzer jedoch im Querformat auf die Schaltfläche "Zurück" in meiner Navigationsleiste tippt, ist das Layout des ersten Controllers durcheinander. Siehe unten vor/nach den Screenshots:

before
(Quelle: <a href="http://pessoal.org/shot1.jpg" rel="nofollow noreferrer">pessoal.org</a>)
after
(Quelle: <a href="http://pessoal.org/shot2.jpg" rel="nofollow noreferrer">pessoal.org</a>)

Gibt es Hinweise, wie man den ersten Ansichtscontroller (zweites Screenshot in diesem Beitrag) zwingen kann, in der Hochformat-Bildschirmausrichtung zu bleiben?

2voto

lfalin Punkte 3899

Es scheint keine Möglichkeit zu geben, dies mit den dokumentierten Methoden zu tun.

Ich habe einen Fehler gemeldet: rdar://6399924

"Es gibt keine Möglichkeit, ein UIViewController immer auf eine Ausrichtung zu beschränken"

Sie können es auf open radar sehen (zusammen mit einem Link zum Beispielcode zur Reproduktion des Problems) hier: http://openradar.appspot.com/radar?id=697

0voto

Wie von jemandem im offenen Radar vorgeschlagen, ist ein Workaround, um die "Zurück"-Taste im Querformat zu deaktivieren:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{
    // Lassen Sie den Benutzer nicht die "Zurück"-Taste im Querformat drücken - sonst wird die vorherige Ansicht und der Rest der Anwendung auch im Querformat angezeigt, was wir noch nicht testen wollten
    self.navigationController.navigationBarHidden = (UIInterfaceOrientationPortrait != self.interfaceOrientation);
}

0voto

Vinzius Punkte 2930

Es gibt eine Lösung, um das zu tun: Verwenden Sie einen Ansichtscontroller und fügen Sie dessen Ansicht dem Fenster hinzu. Dann in diesem Controller erzwingen Sie das Querformat in der shouldAutorotate... Methode. Es funktioniert gut, aber stellen Sie sicher, dass es für Ihr Projekt notwendig ist, das zu verwenden, denn es ist nicht sehr klug, den Benutzer zu zwingen, sein iPhone zu drehen. Hier ist übrigens ein Beispielcode, wenn Sie ihn benötigen.

http://www.geckogeek.fr/iphone-forcer-le-mode-landscape-ou-portrait-en-cours-dexecution.html

-1voto

Mark Bessey Punkte 19301

Ich konnte es nicht so zum Laufen bringen, wie ich wollte. Es sollte möglich sein, eine bestimmte Ausrichtung für einen ViewController festzulegen, aber der NavigationController scheint nicht immer das Richtige zu tun.

Am Ende habe ich meine Bildschirme so umgestaltet, dass sie in beiden Ausrichtungen funktionieren. Das mag zusätzliche Arbeit bedeuten, aber es fühlt sich sowieso "natürlicher" an.

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