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 doit changer en fonction du mode portrait ou paysage (pour ipad).

Quelqu’un sait comment faire ça? Je cherche depuis un moment … merci!

Regardez UIScreen .

par exemple.

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

Jetez un coup d’oeil à la propriété applicationFrame si vous ne voulez pas que la barre d’état soit incluse (n’affecte pas la largeur).

UPDATE: Il s’avère que UIScreen (-bounds ou -applicationFrame) ne prend pas en compte l’orientation actuelle de l’interface. Une approche plus correcte consisterait à demander à votre UIView ses limites – en supposant que ce UIView ait été automatiquement pivoté par son contrôleur View.

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

Si la vue ne fait pas l’object d’une rotation automatique par View Controller, 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 rectum de la vue dans l’espace de coordonnées de l’interface utilisateur qui, par défaut, ne tiendra pas compte de l’orientation de l’interface.

 CGRect screen = [[UIScreen mainScreen] bounds]; CGFloat width = CGRectGetWidth(screen); //Bonus height. CGFloat height = CGRectGetHeight(screen); 

Cela peut être fait 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]; 

À partir d’iOS 9.0, il n’y a aucun moyen d’obtenir une orientation fiable. C’est le code que j’ai utilisé pour une application que je conçois uniquement pour le mode portrait, donc si l’application est ouverte en mode paysage, elle sera toujours précise:

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

Utilisez ce code cela vous aidera

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

utilisation:

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

Voici un moyen rapide d’obtenir des tailles d’écran, en tenant compte de l’orientation actuelle de l’interface:

 var screenWidth: CGFloat { if UIInterfaceOrientationIsPortrait(screenOrientation) { return UIScreen.mainScreen().bounds.size.width } else { return UIScreen.mainScreen().bounds.size.height } } var screenHeight: CGFloat { if UIInterfaceOrientationIsPortrait(screenOrientation) { return UIScreen.mainScreen().bounds.size.height } else { return UIScreen.mainScreen().bounds.size.width } } var screenOrientation: UIInterfaceOrientation { return UIApplication.sharedApplication().statusBarOrientation } 

Ceux-ci sont inclus en tant que fonction standard dans:

https://github.com/goktugyil/EZSwiftExtensions