Los límites de la pantalla principal de UIScreen devuelven un tamaño incorrecto


Así que creé un nuevo proyecto con la última versión de XCode e intenté registrar el tamaño de pantalla de mi aplicación (para determinar el tipo de dispositivo para la interfaz de usuario). Ejecuté el siguiente código desde mi iPhone 5:

NSLog(@"%f", [[UIScreen mainScreen] bounds].size.height);

Esto devolvió 480, que es el tamaño de pantalla de la antigua familia de iPhone. Lo intenté en el simulador y pasó lo mismo. ¿Hay alguna propiedad que tenga que habilitar en el proyecto para que reconozca el tamaño de la pantalla?

Esto solo sucede para más de 5 dispositivos; si corro el juego en mi iPad, reconoce el tamaño de pantalla 1024.

Sé que este código ha funcionado en el pasado. Hice un juego hace un tiempo usando exactamente el mismo método y no tuvo ningún problema en detectar el tamaño de la pantalla, pero esto fue construido 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;
    }
}
Author: David, 2014-02-10

4 answers

Aparentemente, 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 a este problema:

1. Usar Catálogos de Activos

Cuando creas un nuevo proyecto, hay una cosa llamada catálogo de activos que almacena tus archivos de imagen de lanzamiento. Agregue uno de estos a su proyecto y listo!

2. Desenterrar algunos archivos antiguos

Si usted ha sido alrededor de XCode por un tiempo, usted sabrá 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 su aplicación llamada Default.png, [email protected], y [email protected]. Necesita estos archivos en su aplicación, que son esencialmente imágenes negras con las resoluciones 480x320, 960x640, y 1136x640, respectivamente (tenga en cuenta que estos están en HxW, no WxH).

  1. Agregue estos archivos a su grupo de "Archivos de soporte"
  2. Vaya a las propiedades del proyecto y seleccione " No usar Catálogos de activos " de la sección de Imagen de lanzamiento
  3. Elimine el Catálogo de activos.

Esperemos que esto ayude a alguien más que se encuentra con este problema ridículo.

 99
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-10 03:34:03

IOS a menudo "fingirá" qué tamaño de pantalla tiene. Apple asume, por ejemplo, que si no tienes la imagen de inicio correcta para alguna resolución, entonces no has diseñado tu aplicación para que funcione correctamente en esa resolución, por lo que ejecutará tu aplicación en un tamaño diferente. En un caso extremo, una aplicación solo para iPhone que se ejecuta en un iPad devolverá 320 x 480.

En lo que respecta a su aplicación, el tamaño de pantalla reportado 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 desea, por ejemplo, proporcionando 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).

 2
Author: gnasher729,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-03 10:58:57

En XCode6 no tener una imagen de pantalla de bienvenida para el tamaño de pantalla iPhone5 activará una advertencia. XCode agregará uno predeterminado (solo negro) si presiona la advertencia.

Esto habilitará el tamaño 'normal' del simulador.

 1
Author: Jasper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-10 12:41:12

En iOS 8 [[UIScreen mainScreen] bounds].size.height); devuelve algo invertido si el dispositivo está en modo vertical u horizontal.

 1
Author: Nicolas Manzini,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-10 12:45:37