Ich arbeite an einer iPad-App mit AutoLayout. Wenn der Benutzer einen bestimmten Modus aktiviert ("Heads-up" -Modus), möchte ich nur die Ausrichtung im Hochformat (oder im Hochformat auf dem Kopf stehend) unterstützen und außerdem, wenn sich das Gerät befindet Querformat möchte ich automatisch in den Hochformatmodus wechseln.
In der Draufsicht-Steuerung habe ich Folgendes:
- (NSUInteger) supportedInterfaceOrientations {
if (self.modeHeadsUp) {
return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
} else {
return UIInterfaceOrientationMaskAll;
}
}
- (BOOL) shouldAutorotate {
return TRUE;
}
Basierend auf den Antworten, die ich hier an anderer Stelle gesehen habe, scheint die Antwort zu sein, dass ich "application setStatusBarOrientation" verwenden sollte. Daher habe ich in die Methode, bei der der Benutzer den "Heads-up" -Modus ausgewählt hat, Folgendes aufgenommen:
UIApplication *application = [UIApplication sharedApplication];
[application setStatusBarOrientation:UIInterfaceOrientationPortrait
animated:YES];
Dies scheint jedoch einfach nichts zu bewirken. Ich kann das Gerät zwar physisch bewegen, um es in ein Hochformat zu verwandeln, dies geschieht jedoch nicht automatisch.
Wenn ich im Querformatmodus bin, nachdem ich den obigen Code ausgeführt habe, um zu versuchen, die Ausrichtung programmgesteuert festzulegen, bleibt die Anwendung "statusBarOrientation" mit dem folgenden Code bei "4" für Querformat:
UIApplication *application = [UIApplication sharedApplication];
int orientation = [application statusBarOrientation];
self.movesTextView.text = [NSString stringWithFormat:@"ORIENTATION %d", orientation];
Es schien, als würde mit der setStatusBarOrientation kein Autolayout ausgelöst, also habe ich versucht, diesen Code nachher ohne Erfolg hinzuzufügen:
[super updateViewConstraints];
[self.view updateConstraints];
Mir ist klar, dass Apple die Geräteorientierung in den Händen des Benutzers lassen möchte. Ich möchte jedoch den Querformatmodus unterstützen können, wenn ich mich nicht im "Heads-up" -Modus befinde.
Vermisse ich etwas, um eine Orientierungsänderung erzwingen zu können?