Пользовательское изображение UINavigationBar для iPhone 6/6+

У меня есть пользовательское изображение, созданное дизайнером для UINavigationBar. Я получил кусочки размером 640x128 и 640x88 для iPhone. Мои вопросы:

  1. Если я скрываю строку состояния, я использую размер 640x88 или мне все еще нужно использовать 640x128,

  2. Для iPhone 6/6+, а также для iPad я не знаю, как повторно использовать эти изображения, так как размер и соотношение сторон панели навигации отличаются.

К вашему сведению, изображение сделано с использованием градиента цветов сверху вниз (по оси Y). Даже если я использую растягиваемый UIImage, как мне решить проблему с панелью навигации разной высоты на каждом устройстве? Мне нужно ориентироваться на iOS 7 и выше.

3 ответа

Чтобы решить эту проблему, я просто создаю три разных изображения для iPhone 4/5/5s, iPhone 6 и iPhone 6 Plus. Разрешение изображения составляет 320x64, 375x64@2x, 414x64@3x (высота 64, поскольку мне нужно фоновое изображение для панели навигации + строка состояния)

Затем я применяю правильное изображение в приложении init:

NSString * navBarImageName;

if (IS_IPHONE_6P) {
    navBarImageName = @"navBarBackground_iPhone6Plus";
} else if (IS_IPHONE_6) {
    navBarImageName = @"navBarBackground_iPhone6";
} else {
    navBarImageName = @"navBarBackground";
}

UIImage * navBarBackground = [UIImage imageNamed:navBarImageName];
[[UINavigationBar appearance] setBackgroundImage:navBarBackground forBarMetrics:UIBarMetricsDefault];

Вы можете попробовать это В заголовке вы можете определить макросы для разных устройств, таких как

#define IS_IPHONE_5 ( fabs( ( double )[ [ UIScreen mainScreen ] bounds ].size.height - ( double )568 ) < DBL_EPSILON )
#define IS_IPHONE_6 (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)667) < DBL_EPSILON)
#define IS_IPHONE_6_PLUS (fabs((double)[[UIScreen mainScreen]bounds].size.height - (double)736) < DBL_EPSILON)

И тогда, если и еще условие для этого..

UIImageView *imageview;   
if (IS_IPHONE_5){
    imageview=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 320, 45)];
    imageview.image=[UIImage imageNamed:@"yourimage" ];
       [self.navigationController.navigationBar addSubview:imageview];}
else if(IS_IPHONE_6){
    imageview=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 375, 55)];
    imageview.image=[UIImage imageNamed:@"select_albums6"];
}else if (IS_IPHONE_6_PLUS){
    imageview=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 414, 55)];
    imageview.image=[UIImage imageNamed:@"select_albums6"];
} else
{
      // 3.5 inch
    imageview=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 320, 45)];
    imageview.image=[UIImage imageNamed:@"select_album"];
}

а затем добавить навигационное подпредставление

        [self.navigationController.navigationBar addSubview:imageview];

Примечание. Этот код записывается в методах ViewDidLoad и ViewWillAppear, поэтому для панели навигации задается пользовательский размер... Надеюсь, это поможет

Добавляя пользовательское изображение для фона NavigationBar, первое, о чем вы должны подумать - это размеры пользовательского изображения.

1) 320x44 => background.png
2) 640x88 => background@2x.png
3) 1334x183 => background@3x.png

Используйте следующий код, чтобы добавить фоновое изображение и избежать каких-либо плиток на фоновом изображении панели навигации.

[self.navigationController.navigationBar setBackgroundImage:[[UIImage imageNamed:@"background"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0) resizingMode:UIImageResizingModeStretch] forBarMetrics:UIBarMetricsDefault];
Другие вопросы по тегам