Question

Mon application est assez simple, mais j'ai quelques problèmes au démarrage. Je setted dans le Info.plist être aménagé, mais il semble ignorer l'ordre. En fait, lorsque l'application se charge du simulateur est aménagé, mais il retourne en mode portrait.

Ceci est la hiérarchie des vues et des contrôleurs:

  • MainViewController (étend UITabBarController juste pour passer outre shouldAutorotateToInterfaceOrientation :)
    • Trois UITableViewControllers étendues sous forme d'onglets (aussi ceux ont le shouldAutorotateToInterfaceOrientation correctement setted vers le haut).

Si je force un peu l'orientation de l'appareil Paysage avec:

[[UIDevice currentDevice] setOrientation: UIInterfaceOrientationLandscapeRight];

Ensuite, pour un instant les flashes du simulateur en mode portrait, et il va paysagée. Le problème est que de cette façon, les animations rotation automatique se met en marche, ce qui est quelque chose que je ne peux pas tollerate. Je veux juste une application fixe, paysager.

Les indices? Est-ce que je manque quelque chose?

Était-ce utile?

La solution

Essayez ce qui suit. Je ne sais pas pourquoi il ne fonctionne pas pour vous

1) définir la clé UIInterfaceOrientation
à UIInterfaceOrientationLandscapeRight dans votre fichier .plist

2) remplacer méthode UITabBarController shouldAutorotateToInterfaceOrientation (); dans ce qui suit le code ne traite que l'onglet zéro et un, et seulement avec un contrôleur: si vous avez un contrôleur de navigation et que vous voulez contrôler différents contrôleurs qui peuvent être sur la pile, vous devez modifier le code en conséquence

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

    BOOL tabZeroController = [[[self.viewControllers objectAtIndex:0] visibleViewController] isKindOfClass:[YourTabZeroTableViewController class]];

    BOOL tabOneController = [[[self.viewControllers objectAtIndex:1] visibleViewController] isKindOfClass:[YourTabOneTableViewController class]];


    if(self.selectedIndex == 0 && tabZeroController)
        return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);

    if(self.selectedIndex == 1 && tabOneController)
        return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);

    return NO;

}

2) de réglage

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

dans votre méthode applicationDidFinishLaunching () du délégué est uniquement nécessaire pour le simulateur, et non sur un dispositif

3) ajouter le shouldAutorotateToInterfaceOrientation suivant (méthode) dans vos contrôleurs

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{
   return (interfaceOrientation == UIInterfaceOrientationLandscapeRight);
}

4) exécuter l'application sur votre appareil et vérifiez qu'il fonctionne correctement en utilisant l'élément de menu matériel Rotation à gauche et Rotation à droite. Vous devriez voir l'affichage en mode paysage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top