Установить фоновое изображение панели навигации для всех баров - PullRequest
6 голосов
/ 27 октября 2011

, так как я обновил до xcode 4.2 и iOS 5, следующий код не действует:

@implementation UINavigationBar (CustomNavBarBG)
-(void)drawRect:(CGRect)rect{
    UIImage *image = [UIImage imageNamed:@"navbar.png"];
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
    self.tintColor = [UIColor colorWithRed:124/255.0 green:177/255.0 blue:55/255.0 alpha:1.0];
}
@end

@implementation MyAppDelegate
//....

Это должно применить фоновое изображение и цвет к панели навигации.Но после обновления я получаю синий цвет по умолчанию.Я использую фреймворк Three20 в своем проекте.

Есть идеи, почему это не работает?Как установить фоновое изображение для всех панелей навигации в одном месте, а не в каждом контроллере вида?

Ответы [ 5 ]

28 голосов
/ 27 октября 2011

Попробуйте установить:

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

в вашем - (void) applicationDidFinishLaunching:(UIApplication *)application


РЕДАКТИРОВАТЬ: тоже кажется полезным:

[[UINavigationBar appearance] setTintColor:myColor]; 
2 голосов
/ 27 октября 2011

В ios5 есть встроенные методы для изменения фонового изображения. Для этого я создал категорию, которая работает на ios 4 и 5. (Код здесь не указан), но создать его не составит труда.

[navBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
1 голос
/ 02 сентября 2014

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

UIImage *NavigationPortraitBackground = [UIImage imageNamed:@"red_bg.png"];
[[UINavigationBar appearance] setBackgroundImage:NavigationPortraitBackground forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"red_bg.png"] forBarMetrics:UIBarMetricsDefault];
1 голос
/ 04 мая 2012

У меня была та же проблема [[UINavigationBar appearance] setBackgroundImage:myImage forBarMetrics:UIBarMetricsDefault];, которая не работает на iOS 4, но работала нормально на iOS 5. Поэтому я попробовал альтернативное решение для нее.

image = [UIImage imageNamed:@"yourImageName.png"];
    if([[UINavigationBar class] respondsToSelector:@selector(appearance)]) //iOS >=5.0
    {
        [[UINavigationBar appearance] setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
    }
    else
    {
        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
        [self.navigationController.navigationBar addSubview:imageView];
    }
0 голосов
/ 20 апреля 2013

У меня есть другое решение, потому что решение выше скрытие всех кнопок на панели навигации

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navbar.png"] forBarMetrics:UIBarMetricsDefault];
...