2010-09-15 5 views
0

J'ai un contrôleur de vue qui gère une vue.La sous-vue UIView ne change pas d'orientation

J'ajoute la sous-classe myview controller en tant que sous-vue de la fenêtre en remplaçant une autre vue. Je suis en mode paysage sur un iPad.

La vue ne sait apparemment pas que c'est en mode paysage. Son cadre est confus.

Y at-il quelque chose que je peux/dois faire pour dire que c'est en paysage, et/ou que l'orientation a changé. Comment cela se passe-t-il normalement? Pourquoi ça ne se passe pas?

J'avais l'habitude d'avoir mon contrôleur de vue au sein d'un UITabBarController et cela a bien fonctionné là.

Répondre

0

Override:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 
    return YES; 
} 
+0

C'est déjà là. Ce n'est pas le problème. – David

0

Votre ViewController ne reçoit pas les événements de rotation parce que vous ne l'avez pas présenté le viewController, mais ont ajouté le point de vue de la viewController dans la hiérarchie de la vue.

Votre contrôleur de barre d'onglets précédemment utilisé pour prendre la responsabilité de transmettre les événements de rotation au contrôleur de vue qu'il gère, c'était comme cela que cela fonctionnait.

Je suggérerais que l'échange de la vue par la fenêtre est une mauvaise idée. Au lieu de cela, vous devriez avoir un viewController principal qui accepte les événements de rotation, puis permuter la vue dans ce viewController en fonction de l'orientation actuelle. Envisagez de redésigner avant de coder davantage.

+0

Suggérez-vous d'avoir mon propre contrôleur de vue racine et d'échanger des sous-vues? Une des vues est un UISplitView et il n'a pas semblé aimer ceci. Mais peut-être que je ne le dis pas assez ou que j'envoie assez d'événements. Y a-t-il un exemple de la meilleure façon de changer de vue? – David

+0

Si vous utilisez un splitViewController, je crains, contrôleur de vue partagée devrait toujours être un contrôleur de vue principale. Les événements de rotation n'ont pas besoin d'être transmis explicitement. Les messages sont et devraient être envoyés en interne. Échanger des vues après la rotation n'est pas agréable aux yeux. L'interface utilisateur bascule soudainement lorsque la rotation se produit. Lorsque la rotation se produit, les vues doivent être redimensionnées avec les masques d'autorésisation appropriés. Mais, si vous avez une telle exigence, vous pouvez aller de l'avant avec ma suggestion + à condition que vous n'ayez pas scindé la vue en sous-vue, car cela implique des événements de rotation. –

0

Mon problème était que mon storyboard remplaçait mon délégué d'application codé personnalisé existant. Après avoir supprimé le fichier du story board et généré le code du contrôleur de vue personnalisé, cela a fonctionné pour moi.