Как добавить фоновое изображение на панель навигации iphone?

Я хочу добавить фоновый рисунок изображения в свою панель навигации

Это правильно ?

//set custom background image UIImageView *backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"NavigationBackground.png"]]; [self.navigationBar insertSubview:backgroundView atIndex:0]; [backgroundView release]; 

Вот код из ссылки @luvieere. Вставьте этот код в controller rootview чуть выше @implementation rootviewController

 @implementation UINavigationBar (CustomImage) - (void)drawRect:(CGRect)rect { UIImage *image = [UIImage imageNamed:@"NavigationBar.png"]; [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; } @end 

Начиная с iOS 5, есть официальный способ сделать это. (см. iOS Developer Library )

 // someplace where you create the UINavigationController if ([navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) { UIImage *image = [UIImage imageNamed:@"NavigationBar.png"]; [navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; } 

Но все-таки сохраните старый код для обратной совместимости, если вы действительно не хотите вырезать iOS 4 и ниже.

Ваш код сам по себе этого не сделает, вам нужно будет написать категорию, чтобы она работала. Существует два подхода к тому, как вы должны это делать: первый включает в себя создание подвидности вашего UINavigationBar и повторное привлечение его к фронту в каждом из UIViewController viewDidAppear . Тем не менее, было сообщено о некоторых проблемах с покрытием права UIBarButtonItem . Другой метод включает переопределение

- (void)drawRect:(CGRect)rect

и рисуя изображение там. Обе эти темы широко освещены в этом блоге .

Самый простой способ – просто установить содержимое слоя UINavigationBar .

 NSString *barBgPath = [[NSBundle mainBundle] pathForResource:@"mybgimage" ofType:@"png"]; [nBar.layer setContents: (id)[UIImage imageWithContentsOfFile: barBgPath].CGImage]; 

Недостатком является то, что кнопки не генерируются с помощью правильного оттенка, но вы можете установить цвет навигатора на то, что ближе всего к вашему изображению bg, и нужно позаботиться о оттенке.

Я бы сделал это в appdelegate что-то вроде

 + (void)Generalstyle { //navigationbar UINavigationBar *navigationBar = [UINavigationBar appearance]; [navigationBar setBackgroundImage:[UIImage imageNamed:@"navigation.png"] forBarMetrics:UIBarMetricsDefault]; } 

И в

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [[self class] Generalstyle]; } 

.h файл:

 + (void) Generalstyle; 

в ios5, я установил фоновое изображение навигационной панели (для всего изображения на панели навигации) в AppDelegate.m :

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [application setStatusBarStyle:UIStatusBarStyleBlackOpaque animated:NO]; UIImage *navBarBackgroundImage = [UIImage imageNamed:@"nav_bg"]; [[UINavigationBar appearance] setBackgroundImage:navBarBackgroundImage forBarMetrics:UIBarMetricsDefault]; return YES; } 

Когда придет iphone 5, мы должны установить оба типа устройства. Поэтому используйте это

 if([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) { //iOS 5 new UINavigationBar custom background [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbg_ForiPhone5_Imagename.png"] forBarMetrics: UIBarMetricsDefault]; } else { [self.navigationController.navigationBar insertSubview:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"navbg_ForOtherIphone_Imagename.png"]] atIndex:0]; } 

Для получения дополнительной информации перейдите по этой ссылке

Это отлично работает в iOS 6 и 7

 UINavigationBar *navBar = [[self navigationController] navigationBar]; UIImage *backgroundImage = [UIImage imageNamed:@"nav-bar-background-normal"]; [navBar setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault]; 

Быстрая версия :

 let navBar = UINavigationBar.appearance(); navBar.setBackgroundImage(UIImage(named: "yourImageName"), forBarMetrics: .Default) 

Обновлен Swift 3.2 :

 let navBar = UINavigationBar.appearance(); navBar.setBackgroundImage(UIImage(named: "yourImageName"), for: .default) 

Вы также можете добавить категорию, которая расширяет class UINavigationBar и переопределяет метод drawRect:.

то, что я сделал, только что создал UIImage с изображением, которое я хотел, и добавил в панель навигации, как это.

 UIImage *image = [UIImage imageNamed:@"yourImage.png"]; [[UINavigationBar appearance] setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; 

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

1) background.png => 320×44
2) [email protected] => 640×88 // используется для iPhone5 и для устройств сетчатки
3) [email protected] => 1334×183 // используется для iPhone6

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

 [self.navigationController.navigationBar setBackgroundImage:[[UIImage imageNamed:@"background"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0) resizingMode:UIImageResizingModeStretch] forBarMetrics:UIBarMetricsDefault]; 

Попробуйте использовать этот код в своем classе AppDelegate для отображения изображения на панели навигации. Это поможет вам много.

 [[UINavigationBar appearance] setBackgroundImage:[[UIImage imageNamed:@"headerImg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)] forBarMetrics:UIBarMetricsDefault]; 
  • iPhone: настройка заголовка панели навигации
  • Давайте будем гением компьютера.