Настройка панели навигации в ios4 не работает в ios5 - PullRequest
0 голосов
/ 24 ноября 2011

я знаю, что этот вопрос выглядит так же, как и здесь, но никто из них не говорит ничего о несовместимости между ios4 и ios5.

В моем приложении я хочу настроить шаблон панели навигации, но моя цель развертывания - ios4, поэтому я использую приведенный ниже код над реализацией appDelegate.m, чтобы сделать это:

@implementation UINavigationBar (CustomImage)

- (void)drawRect:(CGRect)rect {
UIColor *color = [UIColor blackColor];
UIImage *image = [UIImage imageNamed: @"nav_bar.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
self.tintColor = color;
}

@end

Когда я запускаю приложение с помощью имитатора 4.3, оно работает правильно, но когда я имитирую в ios5, оно не работает, панель навигации возвращается к цвету по умолчанию ... любая помощь?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 23 января 2012

Вот категория, которая будет работать как на iOS 4, так и на 5:

@implementation UINavigationBar (CustomBackground)

- (UIImage *)barBackground
{
    return [UIImage imageNamed:@"top-navigation-bar.png"];
}

- (void)didMoveToSuperview
{
    //iOS5 only
    if ([self respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)])
    {
        [self setBackgroundImage:[self barBackground] forBarMetrics:UIBarMetricsDefault];
    }
}

//this doesn't work on iOS5 but is needed for iOS4 and earlier
- (void)drawRect:(CGRect)rect
{
    //draw image
    [[self barBackground] drawInRect:rect];
}

@end
2 голосов
/ 24 ноября 2011

Я бы рекомендовал использовать существующий код при работе на iOS4 и использовать новые функции iOS5 для настройки панели под iOS5.

См. Здесь: DrawRect UINavigationBar не вызывается в iOS 5.0

1 голос
/ 24 ноября 2011

Для iOS5 вы можете использовать этот подход:

if([navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) {
    [navigationBar setBackgroundImage:[UIImage imageNamed: @"nav_bar.png"]; forBarMetrics: UIBarMetricsDefault];
}

Я обычно помещаю его в appDelegate.

...