2 Stimmen

Iphone gibt immer UIInterfaceOrientationPortrait zurück

Ich muss sicherstellen, dass mein UIViewController beim Laden entsprechend rotiert.

Ich habe die Methoden shouldAutorotateToInterfaceOrientation implementiert und alles funktioniert gut, außer wenn die App zuerst geladen wird (wenn das iPhone im Querformat steht) oder wenn von einem UIViewController, der im Hochformat steht, aufgerufen wird, gibt interfaceOrientation und [[UIDevice currentDevice] orientation] immer das Hochformat zurück!

Ich habe Blogs und sogar einige SO-Fragen gelesen, aber keiner von ihnen scheint das zugrunde liegende Problem anzusprechen.

Ich verwende eine Standard-UINavigationController-Anwendung. Die erste Ansicht ist also der erste Controller, der auf den Stapel gelegt wird. Ich habe auch versucht, die Orientierung von self.navigationController abzufragen, aber auch das war erfolglos.

Jede Hilfe hier ist sehr willkommen.

BEARBEITEN: Hier ist mein Code für das viewWillAppear

- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[self navigationController] setNavigationBarHidden:YES animated:NO];

UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];

if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown)
    [self setPortraitMode];
else
    [self setLandscapeMode];
}

BEARBEITEN 2

Hier ist, wie ich das aktuelle ausgebe:

UIInterfaceOrientation orientation = [[UIDevice currentDevice] orientation];
NSLog(@"currentDevice: %d", (int)orientation);
NSLog(@"statusbar: %d", (int)[UIApplication sharedApplication].statusBarOrientation);
NSLog(@"nav controller: %d", (int)self.navigationController.interfaceOrientation);
NSLog(@"interface orientation: %d", (int)self.interfaceOrientation);

Sie alle geben "1" aus

aber wenn ich diesen Code in die Methode willRotateToInterfaceOrientation einfüge, geben sie die richtigen int-Werte aus (1,2,3 oder 4).

1voto

Javal Nanda Punkte 1818

Verwenden Sie statt [[UIDevice currentDevice] orientation] zur Überprüfung der Orientierung die Statusleistenorientierung, um die genaue Orientierung zu erhalten: [UIApplication sharedApplication].statusBarOrientation. Ich hatte auch Probleme beim Überprüfen der currentDevice-Orientierung, da sie nicht immer die genaue Orientierung zurückgibt.

1voto

nielsbot Punkte 15742

Wie wäre es, die Ausrichtung stattdessen in viewDidAppear: zu überprüfen? Sie können das „animated“ verwenden, um zu entscheiden, ob Sie mit Animation drehen oder nicht. Ihr View kann erscheinen und sich dann drehen, aber ich denke, das wäre eine akzeptable Erfahrung.

EDIT: Als Ergänzung zu meinen Kommentaren hier ein Screenshot aus Xcode 4 für UIInterfaceOrientation:

Bildbeschreibung eingeben

1voto

Darren Punkte 25326

IPhone-Apps werden immer im Hochformat gestartet, da der Startbildschirm nur im Hochformat verfügbar ist. Ebenso ist beabsichtigt, dass das Startbild im Hochformat angezeigt wird. Die einzige Ausnahme ist, wenn die App nur im Querformat verfügbar ist.

(iPad-Apps können in jeder Bildschirmausrichtung gestartet werden, und Sie müssen separate Startbilder für beide Ausrichtungen bereitstellen.)

0voto

anky_believeMe Punkte 484

Ich habe mit den Rotationen und Ausrichtungen der iOS-App gearbeitet. Ich habe festgestellt, dass self.interfaceOrientation immer ein korrektes Ergebnis liefert, wenn es in viewDidAppear oder danach aufgerufen wird.

[UIApplication sharedApplication].statusBarOrientation sollte bevorzugt werden, wenn ein View direkt zum UIWindow hinzugefügt wird.

Hoffentlich hilft es.

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