2010-09-25 10 views
2

Dans "View Did Load", j'essaie de déterminer la taille de la vue afin de pouvoir dimensionner correctement une sous-vue. Je veux qu'il s'étire toujours sur la longueur et la largeur de l'écran indépendamment de l'orientation.Problème de taille de l'image/de l'orientation de l'iPad

quest *anview = [[quest alloc] initWithFrame: CGRectMake(50, 50, self.view.frame.size.width-100, self.view.frame.size.height-100)]; 
self.aquest=anview; 

Mais cela renvoie toujours une largeur de 748 et une hauteur de 1024 quand il doit retourner le contraire quand je suis dans le paysage. Je sais que vous ne pouvez pas obtenir d'orientation sur le simulateur, mais cela se produit également sur l'appareil. Quand je reçois l'orientation:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications]; 
UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation]; 
NSLog(@"device orientation:%d",orientation); 

je reçois correctement l'orientation, mais cette déclaration de journal retourne l'748/1024 quelle que soit l'orientation.

NSLog(@"size w:%f",self.view.frame.size.width); 
    NSLog(@"size h:%f",self.view.frame.size.height); 

Quelqu'un sait ce qui se passe? Cela est-il dû au fait que je mets cela dans la méthode viewdidLoad? Dois-je le mettre dans viewWillAppear ou viewDidAppear?

Répondre

12

Essayez d'utiliser la propriété bounds au lieu de frame.

La vue est toujours créée en mode portrait, puis pivotée, même si vous lancez l'application en mode paysage. Vous devriez être en mesure de garder la sous-vue étiré en définissant sa taille par rapport à la taille du portrait du parent et le masque de autorsizing à UIViewAutoresizingMaskFlexibleWidth | UIViewAutoresizingFlexibleHeight, fournissant le shouldAutorotateToInterfaceOrientation: retour OUI pour l'orientation de l'appareil à droite. Il gardera également la distance de la marge supérieure et gauche sauf si vous ajoutez au masque un UIViewAutoresizingFlexibleMargin différent.