IPhone / IPad: ¿Cómo obtener ancho de pantalla mediante progtwigción?

Hola, me pregunto si hay una manera de obtener el ancho programáticamente.

Estoy buscando algo lo suficientemente general como para acomodar iphone 3gs, iphone 4, ipad. Además, el ancho debería cambiar en función de si el dispositivo es vertical u horizontal (para ipad).

¿¿Alguien sabe cómo hacer esto?? He estado buscando por un tiempo … ¡gracias!

Eche un vistazo a UIScreen .

p.ej.

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

Eche un vistazo a la propiedad applicationFrame si no desea que se incluya la barra de estado (no afectará el ancho).

ACTUALIZACIÓN: Resulta que UIScreen (-bounds o -applicationFrame) no tiene en cuenta la orientación actual de la interfaz. Un enfoque más correcto sería preguntarle a su UIView por sus límites, suponiendo que este UIView haya sido rotado automáticamente por su controlador View.

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

Si View View Controller no está girando automáticamente, deberá verificar la orientación de la interfaz para determinar qué parte de los límites de la vista representa el “ancho” y la “altura”. Tenga en cuenta que la propiedad del marco le dará la rect de la vista en el espacio de coordenadas de UIWindow que (de forma predeterminada) no tendrá en cuenta la orientación de la interfaz.

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

Esto se puede hacer en 3 líneas de código :

 // 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]; 

A partir de iOS 9.0 no hay forma de obtener la orientación de manera confiable. Este es el código que utilicé para una aplicación que diseño solo para modo retrato, por lo que si la aplicación se abre en modo horizontal, seguirá siendo precisa:

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

Use este código que ayudará

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

utilizar:

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

Esta es una forma rápida de obtener tamaños de pantalla, esto también tiene en cuenta la orientación actual de la interfaz:

 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 } 

Estos se incluyen como una función estándar en:

https://github.com/goktugyil/EZSwiftExtensions