Hola, me pregunto si hay una manera de obtener el ancho mediante programación.
Estoy buscando algo lo suficientemente general como para adaptarse a 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?? Llevo un tiempo buscando ... ¡gracias!
iphone
objective-c
cocoa-touch
ipad
Interfaz de usuario de Shai
fuente
fuente
Respuestas:
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, asumiendo que este UIView haya sido girado automáticamente por su controlador de vista.
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation { CGFloat width = CGRectGetWidth(self.view.bounds); }
Si el controlador de vista no gira automáticamente la vista, 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á el rect de la vista en el espacio de coordenadas de UIWindow que (por defecto) no tomará en cuenta la orientación de la interfaz.
fuente
CGRect screen = [[UIScreen mainScreen] bounds]; CGFloat width = CGRectGetWidth(screen); //Bonus height. CGFloat height = CGRectGetHeight(screen);
fuente
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];
fuente
A partir de iOS 9.0 no hay forma de obtener la orientación de manera confiable. Este es el código que usé para una aplicación que diseño solo para modo vertical, 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; }
fuente
Usa este código te ayudará
[[UIScreen mainScreen] bounds].size.height [[UIScreen mainScreen] bounds].size.width
fuente
utilizar:
NSLog(@"%f",[[UIScreen mainScreen] bounds].size.width) ;
fuente
Aquí hay 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 función estándar en:
https://github.com/goktugyil/EZSwiftExtensions
fuente