2012-03-29 9 views
1

Ich habe App, die im Hoch- oder Querformat Modus starten kann. Die Bedienelemente auf dem Hauptbildschirm sehen je nach Anwendungsmodus unterschiedlich aus.iPad erkennt beim Starten nicht die richtige Ausrichtung der Schnittstelle?

Hier ist das Problem - wenn ich Anwendung im Querformat starten, Steuerelemente arent, wo sie sein sollten, behalten sie ihre Positionen wie App ist Porträt-Modus. Ich habe versucht, dies ein wenig zu testen, und hier ist, was ich gefunden habe -

in ViewDidLoad und ViewWilleppear ich bekomme Informationen, dass App im Hochformat ist, obwohl App ist Landscape-Modus. In der Ansicht wurde angezeigt, dass der Wert korrigiert wurde - Querformat. Problem ist, dass ich möchte, dass diese Komponenten auf ihre richtigen Positionen gesetzt werden, bevor die Ansicht erscheint (wenn ich sie nicht klar auf dem Bildschirm positionieren kann).

Was ist der richtige Weg, damit umzugehen?

EDIT: in viewDidLoad und ViewWillAppear, ich nenne das:

orientation = [self getOrientation]; 
if (orientation == OrientationsLandscape) { 
    NSLog(@"Landscape"); 
} 
else { 
    NSLog(@"Portrait"); 
} 

hier ist die Umsetzung von [GetOrientation]

- (int) getOrientation { 
    int currentOrientation = [UIApplication sharedApplication].statusBarOrientation; 
    if (UIInterfaceOrientationIsPortrait(currentOrientation)) return OrientationsPortrait; 
    else return OrientationsLandscape; 
} 

und Auszählung def:

typedef enum { 
    OrientationsLandscape = 0, 
    OrientationsPortrait 
} Orientations; 

Nun, wenn Gerät ist Landscape-Modus und ich versuche, meine App zu installieren, werde ich 2 mal bekommen gedruckt „Portrait“, statt „Landschaft“

+0

Ich habe das gleiche Problem, aber nur, wenn das Gerät aufgedeckt ist. Wenn ich es in den Händen halte, wird die Orientierung erkannt. Wenn ich einen Timer anrufe, der den Test nach der Initialisierung durchführt, funktioniert es. Aber zwischen applicationDidFinishLaunching und meinem Timer-Anruf habe ich einen kurzen weißen Bildschirm ... Hast du eine Lösung gefunden? – Martin

+0

Ich postete die Lösung hier: http://StackOverflow.com/A/13763842/127493 – Martin

Antwort

1

Versuchen Sie folgendes:

[UIApplication sharedApplication].statusBarOrientation 
+0

Ich benutze das bereits, um die richtige Schnittstellenausrichtung herauszufinden, aber wie ich es traurig finde, gibt es eine falsche Ausrichtung zurück. – MegaManX

+0

Also versuchen Sie [UIDevice currentDevice] .orientation. Einer von ihnen zeigt immer die richtige Orientierung. – SVGreg

+0

[UIDevice currentDevice] .orientation ist für diese Verwendung nicht korrekt, Sie müssen [UIApplication sharedApplication] .statusBarOrientation verwenden – Fry

0

Ebenso wichtig ist, stellen Sie sicher, dass Sie den richtigen autoresizingMask Eigenschaft aller UI-Elemente festgelegt haben. Zweitens, wenn ich dieses Problem habe, habe ich es in der Init-Methode behoben. In der init solltest du die iPad-Ausrichtung wie von SVGreg vorgeschlagen steuern und dann den UI-Elementen den richtigen Rahmen zuweisen.

+0

In der Init-Methode gibt es keine Möglichkeit zu wissen, wie Ihre Benutzeroberflächenausrichtung ist. Sie können die Ausrichtung basierend auf der Geräteausrichtung erraten, aber das Problem liegt darin, ob der Benutzer die Ausrichtung festlegt - aus diesem Grund sollte die Schnittstellenausrichtung verwendet werden. – MegaManX

+0

Die Standardausrichtung wird als Porträt betrachtet. Wenn die Ausrichtung Hochformat ist, passiert nichts, wenn stattdessen die Ausrichtung in Querformat aufgerufen wird. – Fry

Verwandte Themen