ios - guide - Límites de pantalla principal de UIScreen que devuelven un tamaño incorrecto
iphone se resolution (4)
Así que creé un nuevo proyecto con la última versión de XCode e intenté registrar el tamaño de la pantalla de mi aplicación (para determinar el tipo de dispositivo para la IU). Corrí el siguiente código de mi iPhone 5:
NSLog(@"%f", [[UIScreen mainScreen] bounds].size.height);
Esto devolvió 480
, que es el tamaño de la pantalla para la antigua familia de iPhone. Lo intenté en el simulador y sucedió lo mismo. ¿Hay alguna propiedad que deba habilitar en el proyecto para que reconozca el tamaño de la pantalla?
Esto solo ocurre para más de 5 dispositivos; si ejecuto el juego en mi iPad, reconoce el tamaño de pantalla de 1024.
Sé a ciencia cierta que este código ha funcionado en el pasado. Hace un tiempo que realicé un juego con el mismo método y no tuve problemas para detectar el tamaño de la pantalla, pero esto se creó en XCode 4.x.
Información adicional:
Estoy usando un controlador de vista personalizado, que creo en el delegado de la aplicación con el siguiente código:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
if([Global getDevice] == 1)
{
//iPhone 5+
self.window.rootViewController = [[FivePlus alloc] initWithNibName:nil bundle:nil];
}
else if([Global getDevice] == 2)
{
//iPhone 4S-
self.window.rootViewController = [[FourSMinus alloc] initWithNibName:nil bundle:nil];
}
else
{
//iPad
self.window.rootViewController = [[iPad alloc] initWithNibName:nil bundle:nil];
}
[[self window] makeKeyAndVisible];
// Override point for customization after application launch.
return YES;
}
El método getDevice de Global.h:
+ (int)getDevice
{
if([[UIScreen mainScreen] bounds].size.height == 568 || [[UIScreen mainScreen] bounds].size.width == 568)
{
return 1;
}
else if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
return 3;
}
else
{
return 2;
}
}
Al parecer, iOS se basa únicamente en la presencia de una imagen de lanzamiento en la resolución de un iPhone 5+ para permitir que la aplicación se ejecute en esa resolución.
Hay dos soluciones para este problema:
1. Utilice los catálogos de activos
Cuando creas un nuevo proyecto, hay algo que se llama un catálogo de activos que almacena tus archivos de imagen de inicio. Añade uno de estos a tu proyecto y listo!
2. Saca algunos archivos viejos
Si has estado alrededor de XCode por un tiempo, sabrás que en una de las versiones posteriores de XCode 4.x, la aplicación creó automáticamente tres archivos de imagen de inicio predeterminados para tu aplicación llamada Default.png
, [email protected]
, y [email protected]
. Necesita estos archivos en su aplicación, que son esencialmente solo imágenes negras con las resoluciones 480x320
, 960x640
y 1136x640
, respectivamente (tenga en cuenta que están en HxW, no WxH).
- Agregue estos archivos a su grupo de "Archivos de soporte"
- Vaya a las propiedades del proyecto y seleccione "No usar catálogos de activos" en la sección de Lanzamiento de imagen
- Eliminar el Catálogo de Activos.
Esperemos que esto ayude a alguien más que encuentre este ridículo problema.
En XCode6, al no tener una imagen de pantalla de bienvenida para el tamaño de pantalla del iPhone5, se activará una advertencia. XCode agregará una predeterminada (solo en negro) si presiona la advertencia.
Esto habilitará el tamaño del simulador ''normal''.
En iOS 8 [[UIScreen mainScreen] bounds].size.height);
devolver algo invertido si el dispositivo está en modo vertical u horizontal.
iOS a menudo "fingirá" qué tamaño de pantalla tienes. Apple asume, por ejemplo, que si no tiene la imagen de inicio correcta para alguna resolución, entonces no ha diseñado su aplicación para que funcione correctamente en esa resolución, por lo que la ejecutará en un tamaño diferente. En un caso extremo, una aplicación solo para iPhone que se ejecute en un iPad devolverá 320 x 480.
En lo que se refiere a su aplicación, el tamaño de pantalla indicado es el tamaño de pantalla disponible para su aplicación. Si informa 320 x 480, entonces eso es lo que su aplicación puede usar. Cualquier cosa dibujada por debajo de 480 píxeles no será visible.
Convence a iOS para que ejecute su aplicación en la resolución que desee, por ejemplo, suministrando una imagen de inicio en el tamaño correcto. En el caso del iPhone 6 y 6+, el usuario puede ejecutarlos en modo "Zoom" para que se comporten como si tuvieran la pantalla de un iPhone 5 o 6 (solo físicamente más grande).