Длинное название, надеюсь, небольшая проблема.
У меня есть UINavigationBar с пользовательским фоновым изображением. Мое приложение будет поддерживать как альбомную, так и портретную ориентацию. Пейзаж хорошо работает в симуляторе для экранов с диагональю 3 дюйма и без сетчатки. Однако на 4-дюймовом экране Retina фоновое изображение отображается в два раза больше в ландшафтном режиме.
Вот соответствующий фрагмент кода из метода инициализации моего пользовательского навигационного контроллера:
[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 — это макрос, определяемый как:
#define WIDTH_IPHONE_5 568
#define IS_IPHONE_5 ([[UIScreen mainScreen] bounds].size.height == WIDTH_IPHONE_5)
Вот 2 фрагмента экрана, которые могли бы объяснить ситуацию более понятно. Когда приложение открывается в портретном режиме, все в порядке:

Все взрывается при переходе в ландшафтный режим:

Размеры изображения (в пикселях, ширина x высота) для альбомной версии фонового изображения:
- navbar-bg-landscape.png: 480x44
- [email protected]: 960x88
- navbar-bg-landscape-iphone5.png: 1136x88
Или это может быть проблема только симулятора? (У меня сейчас нет настоящего iPhone 5)
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets resizingMode:(UIImageResizingMode)resizingModeдля использования одного изображения для iphone/ipone5/ipad? - person Nekto   schedule 10.10.2012