2013-04-23 2 views
3

Я могу установить фон для моей навигационной панели для пользовательского изображения в приложении метод делегата didFinishLaunchingWithOptions с этим кодом:Набор UINavigationBar фоновое изображение в ViewController

UIImage *navBarImage; 
navBarImage = [UIImage imageNamed:@"navbar.png"]; 

[[UINavigationBar appearance] setBackgroundImage: navBarImage forBarMetrics:UIBarMetricsDefault]; 

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

Это код, у меня есть:

- (void) switchChanged:(id)sender { 
    UISwitch* switchView = sender; 

     if (switchView.isOn) { 
      UIImage *navBarImage = [UIImage imageNamed:@"black_nav.png"]; 
      [[UINavigationBar appearance] setBackgroundImage: navBarImage forBarMetrics:UIBarMetricsDefault]; 
     } 
     else { 
      UIImage *navBarImage = [UIImage imageNamed:@"white_nav.png"]; 
      [[UINavigationBar appearance] setBackgroundImage: navBarImage forBarMetrics:UIBarMetricsDefault]; 
     } 
} 

ответ

6

Используйте setBackgroundImage:forBarMetrics: метод:

[navbar setBackgroundImage:[UIImage imageNamed:@"navbar"] 
       forBarMetrics:UIBarMetricsDefault]; 
3

Вы можете заменить по умолчанию в каждом представлении это сделать:

UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0, 
self.navigationController.navigationBar.frame.size.width, 
self.navigationController.navigationBar.frame.size.height)]; 
[imageView setImage:[UIImage imageNamed:@"newImage.png"]]; 
[self.navigationController.navigationBar addSubview:imageView]; 
[self.navigationController.navigationBar sendSubviewToBack:imageView]; 
+0

+1 для вас .... supb чувак ... :) –

+0

+100 для этого .. Ответ на решетку. – Ayaz

+0

Это заставило мой navBar исчезнуть в 8.3, но я удалил последнюю строку: sendSubviewToBack: и он отлично работал. –

0

Попробуйте это

// Создание полноразмерного изображения

UIImage *gradientImage44 = [[UIImage imageNamed:@"surf_gradient_textured_44"] 
      resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 
UIImage *gradientImage32 = [[UIImage imageNamed:@"surf_gradient_textured_32"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; 

// Установить фоновое изображение для все UINavigationBars

[[UINavigationBar appearance] setBackgroundImage:gradientImage44 forBarMetrics:UIBarMetricsDefault]; 
[[UINavigationBar appearance] setBackgroundImage:gradientImage32 forBarMetrics:UIBarMetricsLandscapePhone]; 
Смежные вопросы