Ejecuté el siguiente código tanto en iOS 7 como en iOS 8:
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
BOOL landscape = (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight);
NSLog(@"Currently landscape: %@, width: %.2f, height: %.2f",
(landscape ? @"Yes" : @"No"),
[[UIScreen mainScreen] bounds].size.width,
[[UIScreen mainScreen] bounds].size.height);
El siguiente es el resultado de iOS 8:
Currently landscape: No, width: 320.00, height: 568.00
Currently landscape: Yes, width: 568.00, height: 320.00
En comparación con el resultado en iOS 7:
Currently landscape: No, width: 320.00, height: 568.00
Currently landscape: Yes, width: 320.00, height: 568.00
¿Existe alguna documentación que especifique este cambio? ¿O es un error temporal en las API de iOS 8?
Respuestas:
Sí, depende de la orientación en iOS8, no es un error. Puede revisar la sesión 214 de WWDC 2014 para obtener más información: "Ver los avances del controlador en iOS 8"
Cita de la presentación:
UIScreen ahora está orientado a la interfaz:
fuente
Sí, depende de la orientación en iOS8.
Escribí un método Util para resolver este problema para aplicaciones que necesitan admitir versiones anteriores del sistema operativo.
fuente
Sí, de hecho, el tamaño de la pantalla ahora depende de la orientación en iOS 8. A veces, sin embargo, se desea obtener un tamaño fijo a la orientación vertical. Así es como lo hago.
fuente
Sí, ahora depende de la orientación.
Prefiero el siguiente método para obtener el tamaño de la pantalla de forma independiente de la orientación a algunas de las respuestas anteriores, tanto porque es más simple como porque no depende de ninguno de los códigos de orientación (cuyo estado puede depender de hora en que se llaman) o en la comprobación de versión. Es posible que desee el nuevo comportamiento de iOS 8, pero esto funcionará si necesita que sea estable en todas las versiones de iOS.
fuente
En relación con esta pregunta, ya que resolvió mi problema, aquí hay dos definiciones que uso para los cálculos de ancho y alto de pantalla:
Si es compatible con iOS 7 y iOS 8, esta es la mejor solución para este problema.
fuente
Puede usar
nativeBounds
(orientación independiente)nativeBounds
Detectando la altura del dispositivo:
Detectando el ancho del dispositivo:
fuente
No es un error en iOS 8 SDK. Hicieron límites, la orientación de la interfaz dependía. De acuerdo con su pregunta sobre alguna referencia o documentación sobre ese hecho, le recomendaré encarecidamente que vea la
View Controller Advancements in iOS 8
sesión 214 de WWDC 2014 . La parte más interesante (según tus dudas) es laScreen Coordinates
que comienza a las 50:45.fuente
Sí, depende de la orientación en iOS8.
Así es como puede tener una forma coherente de leer los límites de una manera iOS 8 en las versiones de SDK y OS.
fuente
Mi solución es una combinación de MaxK's y hfossli. Hice este método en una categoría de UIScreen y no tiene verificaciones de versión (lo cual es una mala práctica):
fuente
Necesitaba una función de ayuda rápida que mantuviera el mismo comportamiento que iOS7 en iOS8; esto me permitió intercambiar mis
[[UIScreen mainScreen] bounds]
llamadas y no tocar otro código ...fuente
El siguiente método se puede utilizar para encontrar los límites de la pantalla para una orientación dada, independientemente de la versión de iOS. Este método devolverá los límites en función del tamaño de la pantalla del dispositivo y le dará el mismo valor CGRect independientemente de la versión de iOS.
fuente
Eso es lo que solía calcular el rect correcto:
fuente
Simplemente agregue la versión rápida de una excelente función cbartel respondida anteriormente.
fuente
Mi problema estaba relacionado con el marco UIWindows que iba en menos. Así que hice el código de la siguiente manera en MyViewController - (NSUInteger) supportInterfaceOrientations Method
Y es trabajo para mí intentarlo.
fuente
iOS 8 o superior
Una solución para aquellos que desean averiguar el tamaño de la pantalla en puntos (la pantalla de 3.5 pulgadas tiene 320 × 480 puntos, la pantalla de 4.0 pulgadas tiene 320 × 568 puntos, etc.) sería
fuente
Una cosa que noté es que el orden de las orientaciones de interfaz compatibles en Info.plist sí importa. Tengo el problema de esta pregunta con mi aplicación (que tiene orientación en el código), pero no especifiqué en ningún lugar que la orientación predeterminada sea Vertical.
Pensé que la orientación predeterminada era vertical en cualquier caso.
La reorganización de itens en Info.plist, poniendo primero a Portrait, restauró el comportamiento esperado.
fuente
Esto le dará al dispositivo correcto en iOS7 y iOS8 ambos,
// También puede agregar más dispositivos (ieiPad).
fuente
Se utilizó la solución de mnemia ligeramente modificada, aquella sin verificación de versión de iOS, usando min / max en los límites de la pantalla principal.
Necesitaba un
CGRect
modo tieneCGRect
de límites Principal Pantalla Principal y cambiaronsize.width=min(w,h)
,size.height=max(w,h)
. Entonces llamé a que se interponen independiente del sistema operativoCGRect
función en dos lugares en mi código, donde conseguir tamaño de pantalla paraOpenGL
, toques etc., antes de fijar tuve 2 problemas - en IOS 8.x en el paisaje de la posición de visualización del modo deOpenGL
vista era incorrecta: 1 / 4 de pantalla completa en la parte inferior izquierda. Y los segundos toques devolvieron valores no válidos. Ambos problemas se solucionaron como se explicó. ¡Gracias!fuente