web-dev-qa-db-fra.com

Forçage de paysage et autorotation dans iOS 7

Mon application est supposée n'être que du paysage, et je n'ai eu aucun problème avec lors de la construction de iOS 6 et des versions antérieures. Maintenant avec iOS 7, Il ne tournera pas du tout.

Dans les paramètres de mon application, je l’ai paramétré sur paysage gauche/droite uniquement. Dans mon contrôleur de vue, j'utilise ce qui suit:

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationLandscapeLeft | UIInterfaceOrientationLandscapeRight;
}

J'avais aussi l'habitude d'utiliser ceci, qui est maintenant obsolète:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation {
    return UIInterfaceOrientationIsLandscape(orientation);
}

Le nouveau semble être devraitAutorotate, mais en utilisant cela bloque mon application. Toute idée à ce sujet serait appréciée, car mon application est forcée de faire un portrait sur mon iPad et dans le simulateur. Je vous remercie!

11
ultra

Cela résout mon problème. Je ne sais pas pourquoi j'avais des problèmes auparavant, mais j'ai dû manquer d'essayer cette combinaison exacte (de plus, info.plist devrait avoir les orientations prises en charge définies).

(NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscape;
}

(BOOL)shouldAutorotate {
    return YES;
}

edit: Je peux avoir des problèmes avec le simulateur, et le fait de réinitialiser/redémarrer et de nettoyer peut avoir contribué à la correction.

12
ultra

Incluez également cette méthode dans votre code:

- (BOOL)shouldAutorotate{
  if([[UIDevice currentDevice] orientation] == UIInterfaceOrientationLandscapeLeft ||[[UIDevice currentDevice] orientation] == UIInterfaceOrientationLandscapeRight)
  {
    return YES;
  }
  else{
    return NO;
  }
}

Lisez ceci pour plus d'informations. Il est mentionné ici que nous devrions remplacer shouldAutorotate pour supprimer les orientations.

Si vous souhaitez désactiver temporairement la rotation automatique, évitez que Ne manipule les masques d'orientation à cette fin. À la place, remplacez la méthode ShouldAutorotate sur le contrôleur de vue le plus élevé. Cette méthode est appelée Avant d’effectuer une autorotation. Si la réponse est NON, la rotation Est supprimée.

4
Puneet Sharma

je ne sais pas pourquoi, mais cela fonctionne pour moi sur IOS 7

[[UIApplication sharedApplication] setStatusBarHidden:NO];

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];

[super willRotateToInterfaceOrientation:UIInterfaceOrientationPortrait duration:0];
1
Siddhartha Moraes

J'ai peut-être des problèmes avec le simulateur, et une réinitialisation/redémarrage Et un nettoyage ont peut-être contribué au correctif.

Cela a fonctionné pour moi: (Simulateur -> Réinitialiser le contenu et les paramètres ...)

0
ShanghaiD