¿Cómo se pueden obtener las dimensiones de la pantalla en iOS?
El problema con el código que publicó es que cuenta con que el tamaño de la vista coincida con el de la pantalla, y como ha visto, ese no es siempre el caso. Si necesita el tamaño de la pantalla, debe mirar el objeto que representa la pantalla en sí, así:
CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;
Actualización para vista dividida: en los comentarios, Dmitry preguntó:
¿Cómo puedo obtener el tamaño de la pantalla en la vista dividida?
El código proporcionado anteriormente informa el tamaño de la pantalla, incluso en modo de pantalla dividida. Cuando usa el modo de pantalla dividida, la ventana de su aplicación cambia. Si el código anterior no le brinda la información que espera, entonces, al igual que el OP, está buscando el objeto incorrecto. Sin embargo, en este caso, debe mirar la ventana en lugar de la pantalla, de esta manera:
CGRect windowRect = self.view.window.frame;
CGFloat windowWidth = windowRect.size.width;
CGFloat windowHeight = windowRect.size.height;
Swift 4.2
let screenRect = UIScreen.main.bounds
let screenWidth = screenRect.size.width
let screenHeight = screenRect.size.height
// split screen
let windowRect = self.view.window?.frame
let windowWidth = windowRect?.size.width
let windowHeight = windowRect?.size.height
[UIScreen scale]
.CGRectGetWidth()
y enCGRectGetHeight()
lugar de acceder directamente alsize
campo en el rectángulo. No creo que sea un problema con respecto al rectángulo de la pantalla, pero supongo que es algo a tener en cuenta.Cuidado, [UIScreen mainScreen] también contiene la barra de estado, si desea recuperar el marco para su aplicación (excluyendo la barra de estado) debe usar
fuente
return [[UIScreen mainScreen] bounds].size.width;
He traducido algunas de las respuestas anteriores de Objective-C al código Swift. Cada traducción se realiza con una referencia a la respuesta original.
Respuesta principal
Respuesta de función simple
Respuesta de orientación del dispositivo
Respuesta de registro
fuente
return UIScreen.mainScreen().bounds].size.width
He usado estos métodos de conveniencia antes:
fuente
Me doy cuenta de que esta es una publicación antigua, pero a veces me resulta útil definir # constantes como estas, así que no tengo que preocuparme por eso:
La constante anterior debe devolver el tamaño correcto sin importar la orientación del dispositivo. Entonces obtener las dimensiones es tan simple como:
fuente
Es muy, muy fácil obtener el tamaño de su dispositivo , así como tener en cuenta la orientación:
fuente
UIAlertView
se insertará como la vista rootViewController de keyWindow. Tengo una lógica que evita el caso de la esquina porque si una vista de alerta está activa, el usuario no puede interactuar con el teclado, por lo que generalmente no hay necesidad de tomar el marco del teclado en ese momento.También tenemos que considerar la orientación del dispositivo:
fuente
fuente
Aquí he actualizado para Swift 3
applicationFrame en desuso de iOS 9
En Swift Three han eliminado () y han cambiado algunas convenciones de nomenclatura, puede consultar aquí Enlace
fuente
La respuesta moderna:
Si su aplicación admite la vista dividida en iPad, este problema se vuelve un poco complicado. Necesita el tamaño de la ventana, no el de la pantalla, que puede contener 2 aplicaciones. El tamaño de la ventana también puede variar mientras se ejecuta.
Utilice el tamaño de la ventana principal de la aplicación:
Nota: El método anterior puede obtener un valor incorrecto antes de que la ventana se convierta en ventana clave al iniciar. Si solo necesita ancho, se recomienda el siguiente método :
La solución anterior usando
UIScreen.main.bounds
devolverá los límites del dispositivo. Si su aplicación se ejecuta en modo de vista dividida, obtiene las dimensiones incorrectas.self.view.window
en la respuesta más reciente puede tener un tamaño incorrecto cuando la aplicación contiene 2 o más ventanas y la ventana tiene un tamaño pequeño.fuente
Utilice estos
Structs
para conocer información útil sobre el dispositivo actual en Swift 3.0fuente
Si desea el ancho / alto de la pantalla independientemente de la orientación del dispositivo (bueno para dimensionar los controladores de vista de solo retrato que se inician desde orientaciones horizontales):
fuente
Aquí hay una forma rápida de obtener tamaños de pantalla:
Estos se incluyen como una función estándar en:
https://github.com/goktugyil/EZSwiftExtensions
fuente
CGFloat width = [[UIScreen mainScreen] bounds].size.width; CGFloat height = [[UIScreen mainScreen]bounds ].size.height;
fuente
swift 3.0
para ancho
para altura
fuente
Puede colocar estas macros en su archivo pch y utilizarlas en cualquier parte del proyecto utilizando "SCREEN_WIDTH"
y "SCREEN_HEIGHT"
Ejemplo de uso:
fuente