2010-08-23 5 views
0

J'ai une grande application sur laquelle je travaille et qui a une vue primaire, appelez cela une vue racine, avec une barre d'outils en haut pour le contrôle du programme. Il y a un certain nombre de vues supplémentaires qui superposent la vue "root" mais laissant la barre d'outils visible - Il y a un menu contextuel qui contrôle quelle vue secondaire est visible sur la vue "root". Veuillez noter que je n'utilise pas de contrôleur splitview.Sous-vues ipad à rotation automatique

Pour économiser des ressources, j'initialise les différentes sous-vues lorsque leur fonction est sélectionnée pour la première fois dans le menu. Toutes les vues secondaires ont été conçues dans IB. Lorsque l'ipad est en mode portrait lorsque les sous-menus sont sélectionnés, toute la rotation automatique fonctionne correctement. Toutefois, lorsque l'ipad est orienté paysage lorsque l'application est démarrée pour la première fois, les sous-vues ne sont pas pivotées et affichées. un mode portrait coupé. Ils ne semblent pas savoir que l'iPad est tourné.

Si j'initialise toutes les sous-vues de la méthode viewDidLoad "root", elles tournent toutes correctement quelle que soit l'orientation de l'ipad au démarrage. Donc si j'initialise les sous-vues avant que la vue "root" ne soit visible, alors tout va bien. Si je les ai initialisés après que la vue "root" soit visible, les sous-vues ne semblent pas tourner automatiquement. Comme il y a beaucoup de code impliqué, j'espère avoir expliqué cela assez clairement pour que quelqu'un avec plus d'expérience ou de perspicacité puisse me mettre sur la bonne voie.

Merci Jim

Répondre

2

Jim, Lorsque vous ajoutez à votre subviews principal UIWindow, un changement dans l'ordre dans lequel vous les ajoutez peuvent affecter la façon dont ces vues sont affectées par l'orientation initiale du dispositif. Par exemple, dans une application avec un contrôleur de navigation (créé dans le code) et un contrôleur de vue (créé en IB), le code suivant affiche correctement quelle que soit l'orientation initiale:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
     UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController]; 

     [self.window addSubview:navigationController.view]; 
     [self.window addSubview:viewController.view]; 
     [self.window makeKeyAndVisible]; 

     return YES; 
} 

Cependant, la pièce suivante le code sera foiré lorsque l'application est démarré en mode paysage (notez l'ordre du addSubview appelle dans la fenêtre):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController]; 

     [self.window addSubview:viewController.view]; 
     [self.window addSubview:navigationController.view]; 
     [self.window makeKeyAndVisible]; 

     return YES; 
} 

Je vais essayer de changer l'ordre dans lequel vous ajoutez les sous-vues. J'espère que cela t'aides!

Questions connexes