web-dev-qa-db-fra.com

IPhone/IPad: Comment obtenir la largeur de l'écran par programmation?

Bonjour, je me demande s’il existe un moyen d’obtenir la largeur par programmation. 

Je cherche quelque chose d'assez général pour accueillir iphone 3gs, iphone 4, ipad. En outre, la largeur devrait changer selon que le périphérique est portrait ou paysage (pour ipad).

Quelqu'un sait comment faire ça ?? Je cherche depuis un moment ... merci! 

79
foreyez

Jetez un coup d’œil à UIScreen .

par exemple.

CGFloat width = [UIScreen mainScreen].bounds.size.width;

Examinez la propriété applicationFrame si vous ne voulez pas que la barre d'état soit incluse (n'affectera pas la largeur).

UPDATE: UIScreen (-bounds ou -applicationFrame) ne prend pas en compte l'orientation actuelle de l'interface. Une approche plus correcte consisterait à demander à UIView de définir ses limites - en supposant que cette UIView a été automatiquement pivotée par son contrôleur de vue.

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    CGFloat width = CGRectGetWidth(self.view.bounds);
}

Si la vue ne tourne pas automatiquement avec le contrôleur de vue, vous devrez vérifier l'orientation de l'interface pour déterminer quelle partie des limites de la vue représente la «largeur» et la «hauteur». Notez que la propriété frame vous donnera le rect de la vue dans l'espace de coordonnées de UIWindow qui (par défaut) ne prendra pas en compte l'orientation de l'interface. 

192
Alan Rogers
CGRect screen = [[UIScreen mainScreen] bounds];
CGFloat width = CGRectGetWidth(screen);
//Bonus height.
CGFloat height = CGRectGetHeight(screen);
11
thyrgle

Cela peut être fait en en 3 lignes de code :

// grab the window frame and adjust it for orientation
UIView *rootView = [[[UIApplication sharedApplication] keyWindow] 
                                   rootViewController].view;
CGRect originalFrame = [[UIScreen mainScreen] bounds];
CGRect adjustedFrame = [rootView convertRect:originalFrame fromView:nil];
6
memmons

Depuis iOS 9.0, il n’ya aucun moyen d’obtenir une orientation fiable. C'est le code que j'ai utilisé pour une application que je conçois uniquement en mode portrait. Par conséquent, si l'application est ouverte en mode paysage, elle reste précise:

screenHeight = [[UIScreen mainScreen] bounds].size.height;
screenWidth = [[UIScreen mainScreen] bounds].size.width;
if (screenWidth > screenHeight) {
    float tempHeight = screenWidth;
    screenWidth = screenHeight;
    screenHeight = tempHeight;
}
0
Bobby

utilisation:

NSLog(@"%f",[[UIScreen mainScreen] bounds].size.width) ;
0
Nick

Utilisez ce code cela vous aidera 

[[UIScreen mainScreen] bounds].size.height
[[UIScreen mainScreen] bounds].size.width
0
Shahzaib Maqbool