¿Cómo detectar el modelo de dispositivo por macro? tenía usando algo como esto, pero el resultado en el simulador siempre es IS_IPHONE_5
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_IPHONE_5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0)
#define IS_IPHONE_6PLUS (IS_IPHONE && [[UIScreen mainScreen] nativeScale] == 3.0f)
#define IS_IPHONE_6_PLUS (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 736.0)
#define IS_RETINA ([[UIScreen mainScreen] scale] == 2.0)
Respuestas:
Rápido
Véalo en acción https://gist.github.com/hfossli/bc93d924649de881ee2882457f14e346
Nota: Si, por ejemplo, el iPhone 6 está en modo ampliado, la interfaz de usuario es una versión ampliada del iPhone 5. Estas funciones no determinan el tipo de dispositivo, sino el modo de visualización, por lo que el iPhone 5 es el resultado deseado en este ejemplo.
C objetivo
Uso: http://pastie.org/9687735
Nota: Si, por ejemplo, el iPhone 6 está en modo ampliado, la interfaz de usuario es una versión ampliada del iPhone 5. Estas funciones no determinan el tipo de dispositivo, sino el modo de visualización, por lo que el iPhone 5 es el resultado deseado en este ejemplo.
fuente
Para Swift:
fuente
fuente
IS_IPHONE_6_IOS7
yIS_IPHONE_6P_IOS7
no son necesarios, el iPhone 6 (+) solo puede estar en iOS 8 y superior.fuente
nativeBounds
es mejor usar quebounds
. Un iPhone 6 con Display Zoom activado reportará 568 para limits.height, pero 1334 para nativeBounds.height, aunque Display Zoom no tiene ningún efecto dentro de las aplicaciones. ( support.apple.com/en-us/HT203073 )Utilizo una clase que extrae información real del sistema. Solo tienes que asegurarte de que todos los tipos de dispositivos estén actualizados.
fuente
Puedo confirmar que el error desaparece cuando configura una pantalla de inicio.
Mantuve mis imágenes de inicio y agregué MainStoryboard a Launch Screen y el simulador reconoció los dispositivos correctamente.
fuente
Es mejor no vincular su código con tipos de dispositivos. Esto conducirá a uno inflexible y complicado. Apple quiere que pienses en tamaños, no en dispositivos. En caso de que necesite tener tamaños especiales para dispositivos más grandes que el iPhone 5, como tamaños de imagen o fuente, recomendaría crear una clase de normalización con un multiplicador que aumente su tamaño base en un cierto porcentaje en función de la relación entre la pantalla del iPhone 5 ancho y el tamaño actual del dispositivo.
Entonces en tu código harás algo como eso:
fuente
static normalize
?Extensión UIDeivce con sintaxis Swift 3+ .
Uso de muestra:
Respuesta original: https://stackoverflow.com/a/36479017/3659227
fuente
Actualización de Xcode 11 / Swift 5.1:
Hola, actualicé a Xcode10 / Swift 4.2 y los nuevos tamaños para iPhone XS / XSMAX / XR
con detección de Notch-IPhones.
Espero que esto ayude a alguien.
}
fuente
Encontré el problema al migrar de un proyecto de iOS 7 a un proyecto de iOS 8, ya que no agregué una escena de pantalla de inicio a mi proyecto.
En este caso, el tamaño de la pantalla del iPhone 6 y 6+ es como el del iPhone 5.
Consulte la documentación de Apple; Utiliza un archivo de lanzamiento XIB o guión gráfico para indicar que su aplicación se ejecuta en iPhone 6 Plus o iPhone 6.
fuente
fuente
Para obtener más, también debe verificar el zoom
fuente
fuente