web-dev-qa-db-fra.com

Comment puis-je désactiver l'orientation paysage?

Je suis en train de créer une application iPhone et j'ai besoin qu'elle soit en mode portrait. Par conséquent, si l'utilisateur déplace l'appareil latéralement, il ne tourne pas automatiquement. Comment puis-je faire ceci?

29
user1483652

Pour désactiver les orientations pour un contrôleur de vue particulier, vous devez maintenant remplacer supportedInterfaceOrientations et preferredInterfaceOrientationForPresentation .

- (NSUInteger) supportedInterfaceOrientations {
    // Return a bitmask of supported orientations. If you need more,
    // use bitwise or (see the commented return).
    return UIInterfaceOrientationMaskPortrait;
    // return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
}

- (UIInterfaceOrientation) preferredInterfaceOrientationForPresentation {
    // Return the orientation you'd prefer - this is what it launches to. The
    // user can still rotate. You don't have to implement this method, in which
    // case it launches in the current orientation
    return UIInterfaceOrientationPortrait;
}

Si vous ciblez une version antérieure à iOS 6, vous souhaitez utiliser la méthode shouldAutorotateToInterfaceOrientation: . En changeant quand il retourne oui, vous déterminez s'il va pivoter selon cette orientation. Cela ne permettra que l'orientation portrait normale.

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 

    // Use this to allow upside down as well
    //return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
}

Notez que shouldAutorotateToInterfaceOrientation: est obsolète dans iOS 6.0

51
thegrinner

Xcode 5 et supérieur

  • Cliquez sur votre projet dans le navigateur de projet dans la barre latérale gauche pour ouvrir les paramètres du projet.
  • Allez dans le Général tab.
  • Décochez les options que vous ne voulez pas dans la section Informations sur le déploiement , sous Orientation du périphérique

screenshot showing where to click

37
skywinder

Xcode 4 et inférieur

Pour ceux qui l'ont manquée: vous pouvez utiliser l'écran des paramètres du projet pour définir les orientations dans l'application (inutile de remplacer les méthodes dans chaque contrôleur):

enter image description here

C'est aussi simple que de basculer les orientations d'interface prises en charge. Vous pouvez trouver en cliquant sur votre projet dans le panneau de gauche> la cible de l'application> onglet Résumé.

28
Thomas Verbeek

Si vous souhaitez désactiver l'orientation paysage pour les deux iPhone et iPad

Allez à Cibles et allez à l'onglet Général. Voir l'écran ci-dessous et désélectionnez paysage à gauche et paysage à droite.

 enter image description here

Ici, dans ce cas, seul le mode paysage iPhone sera désactivé, pas pour iPad. Pour iPad, tous les modes sont activés. Si vous voulez sélectionner l’option de périphérique de Universel à iPad. Ça va ressembler à ça. Voir l'écran ci-dessous.

 enter image description here

Désormais, vous devez désélectionner tous les modes sauf Portrait pour iPad. Voir ci-dessous capture d'écran.

 enter image description here

Vous avez maintenant correctement désactivé tous les modes sauf Portrait pour tous les périphériques.

1
iOS

Swift 3 Si vous avez un navigateurContrôleur, sous-classez-le comme ceci (pour le portrait uniquement):

class CustomNavigationViewController: UINavigationController {

  override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return UIInterfaceOrientationMask.portrait
  }

  override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
    return UIInterfaceOrientation.portrait
  }
}
1
kurtanamo

Le fait de supprimer la méthode shouldAutorotateToInterfaceOrientation de votre classe fonctionne également. Si vous ne prévoyez pas de faire pivoter la machine, cela n'a aucun sens, moins il y a de code, mieux c'est.

0
ElasticThoughts