2011-01-06 3 views
30

Bonjour je veux obtenir la largeur et la hauteur de ma vue principale. Je veux la valeur correcte en mode paysage ou portrait. J'ai essayé ce qui suit:Iphone: Obtenir les dimensions ou dimensions de l'écran actuelles


    NSLog(@"aaa %f", [UIScreen mainScreen].applicationFrame.size.width); 
    NSLog(@"zzz %f", self.view.frame.size.width); 

Ils donnent 300 en mode paysage et 320 en mode portrait, oui c'est plus grand en mode portrait. Alors ... ma vue prend tout l'écran (- barre d'état) donc je m'attends à 480 en mode paysage et 320 en mode portrait. Qu'est-il arrivé au reste des pixels. Dois-je coder en dur ces valeurs? Merci.

Répondre

91

Est-ce que l'une des lignes suivantes fonctionne pour vous?

[[UIScreen mainScreen] bounds].size.height 
[[UIScreen mainScreen] bounds].size.width 

Je suppose que vous pouvez soustraire la hauteur de la barre d'état? Peut-être que je ne comprends pas votre question

+1

Cela fonctionne, il retourne la même largeur et la hauteur pour les deux orientations, mais au moins cela fonctionne. Et oui j'ai besoin de soustraire la barre d'état. –

+0

@Omar vous avez besoin d'un '' avant le UIScreen. –

+0

Hmm, je suppose que BrianV l'a édité pour le réparer (quand vous dites 'édité', ça sonne comme un bégaiement, p). Merci, je l'ai manqué. – Omar

9

Essayez ceci:

UIWindow* window = [UIApplication sharedApplication].keyWindow; 
NSLog(@"%f",window.frame.size.width); 
+0

Cela fonctionne aussi. Cela inclut également la hauteur de la barre d'état. C'est pareil pour toutes les rotations. Merci. –

+0

merci - fonctionne bien si vous avez besoin de soutenir l'écran de 3,5 et 4,0 pouces –

-4

Je pense que le mieux est d'utiliser:

CGRect frame = [[UIScreen mainScreen] frameForOrientation:self.interfaceOrientation]; 

En supposant soi dans l'exemple ci-dessus est un UIViewController. Dans tous les cas, la méthode frameForOrientation attend un type UIInterfaceOrientation.

+5

Euh .. Je n'ai pas une telle méthode pour 'UIScreen' .. ai-je besoin d'autre chose? –

+2

la méthode n'existe pas pour moi non plus. – cyrilchampier

5

macros utiles qui vous donnera la bonne taille en fonction de l'orientation de l'appareil:

#define SCREEN_WIDTH ((([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait) || ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown)) ? [[UIScreen mainScreen] bounds].size.width : [[UIScreen mainScreen] bounds].size.height) 
#define SCREEN_HEIGHT ((([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortrait) || ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown)) ? [[UIScreen mainScreen] bounds].size.height : [[UIScreen mainScreen] bounds].size.width) 
+0

fonctionne comme le charme :) – Swati

+0

c'est super utile – Jordan

Questions connexes