J'ai une configuration assez basique avec un UINavigationController dans un UITabBarController. Je souhaite mettre en page de manière programmatique la vue du rootViewController de ce navcontroller, mais lorsque je regarde self.view.frame dans viewDidLoad, j'obtiens ceci (en anglais) paysage par exemple) :
1. view frame: {{20, 0}, {748, 1024}} // looks like an odd portrait mode
Puis je me dirige automatiquement vers Portrait, et j'obtiens ceci :
2. view frame: {{0, 0}, {768, 911}}
Ensuite, quand je retourne dans Paysage, le cadre est maintenant celui-ci :
3. view frame: {{0, 0}, {1024, 655}}
Et d'autres événements d'autorotation basculeront entre les valeurs de trame #2 et #3.
Pour contourner la bizarrerie du point 1, je fais actuellement ceci dans viewDidLoad :
if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) {
self.view.frame = CGRectMake(0, 0, 768, 911);
} else {
self.view.frame = CGRectMake(0, 0, 1024, 655);
}
J'ai l'impression de rater quelque chose ici. Pourquoi le cadre par défaut de la vue ne correspondrait-il pas au cadre lorsqu'elle revient par autorotation à la même orientation ? Le cadre de la vue n'est-il pas réglé sur l'orientation initiale ? Je suis très confus...
Je dois préciser qu'aucun des éléments ci-dessus, y compris mon hack bancal, ne change quoi que ce soit visuellement. La raison pour laquelle j'ai fait ce hack est que lorsque je disposerai mes sous-vues dans cette vue, elles seront basées sur l'endroit où je m'attends à ce qu'elles soient, c'est-à-dire le coin supérieur gauche juste sous la barre de navigation.
Qu'est-ce que je fais de mal ?
MISE À JOUR : désactiver toutes les fonctions de dimensionnement automatique de la vue modifie le résultat #1 :
view frame: {{0, 0}, {748, 1024}}
Cela semble un peu plus proche, mais ne correspond toujours pas au numéro 3.