La image de background de UINavigationBar no se ajusta correctamente después del cambio de orientación en el iPhone 5

Título largo para, con suerte, un pequeño problema.

Tengo una UINavigationBar con una image de background personalizada. Mi aplicación admite la orientación horizontal y vertical. El paisaje funciona bien en el simulador para retina de 3 pulgadas y pantallas sin retina. Sin embargo, en la pantalla de retina de 4 pulgadas, la image de background se muestra el doble de su tamaño en modo horizontal.

Aquí está el fragment de código relevante del método de inicio de mi controller de navigation personalizado:

[self.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbar-bg.png"] forBarMetrics:UIBarMetricsDefault]; if (IS_IPHONE_5) { [self.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbar-bg-landscape-iphone5.png"] forBarMetrics:UIBarMetricsLandscapePhone]; } else { [self.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbar-bg-landscape.png"] forBarMetrics:UIBarMetricsLandscapePhone]; } 

IS_IPHONE_5 es una macro definida como:

 #define WIDTH_IPHONE_5 568 #define IS_IPHONE_5 ([[UIScreen mainScreen] bounds].size.height == WIDTH_IPHONE_5) 

Aquí 2 fragments de pantalla que podrían explicar las cosas con más claridad. Cuando la aplicación se abre en modo vertical, todo está bien:

retrato

Todo explota al cambiar al modo horizontal:

paisaje

Los tamaños de image (en píxeles, ancho x alto) para la versión horizontal de la image de background son:

  • navbar-bg-landscape.png: 480×44
  • navbar-bg-landscape@2x.png: 960×88
  • navbar-bg-landscape-iphone5.png: 1136×88

¿O podría ser un problema de simulador? (No tengo un iPhone 5 actual en este momento)

Creo que su navbar-bg-landscape-iphone5.png debería llamarse navbar-bg-landscape-iphone5@2x.png y que debería seguir haciendo reference a navbar-bg-landscape-iphone5.png en su código. Debido a que el iPhone 5 tiene una pantalla retina, iOS searchá la versión @2x y la usará. Si no lo encuentra, usará la versión que ha mencionado y luego la ampliará en 2x. Para evitar la expansión 2x ​​por iOS, dale una versión @2x .