Вопрос

Получите небольшую проблему дизайна после обновления до iOS 5 и Xcode 4.2

Так выглядел мой взгляд в iOS 4:

1 http://casperslynge.dk/1

И так выглядит в iOS 5:

2 http://casperslynge.dk/2

В моем делегате навигации у меня есть следующий метод, чтобы нарисовать «изображение» вверху:

- (void)drawRect:(CGRect)rect {
    UIImage *image;
    if(self.barStyle == UIBarStyleDefault){
        image = [UIImage imageNamed: @"topbar_base.png"];
    }
    else{
        image = [UIImage imageNamed: @"nyhedsbar_base.png"];    
    }
    [image drawInRect:CGRectMake(-1, -1, self.frame.size.width+3, self.frame.size.height+3)];
}

И внутри моего контроллера я установил следующее:

self.navigationBarStyle = UIBarStyleBlack;

Почему это не работает в iOS 5?

Спасибо

Это было полезно?

Решение

Под iOS5 вам нужно использовать UIAppearance. Анкет Посмотрите на это. Вот пример для его условного использования, чтобы вы могли продолжать поддерживать iOS4:

// iOS5-only to customize the nav bar appearance
if ([[UINavigationBar class] respondsToSelector:@selector(appearance)]) {
    UIImage *img = [UIImage imageNamed: @"NavBarBackground.png"];
    [[UINavigationBar appearance] setBackgroundImage:img forBarMetrics:UIBarMetricsDefault];
}

Как видите, это устанавливает пользовательское фоновое изображение для все Uinavigationbars. Есть много вещей, которые вы можете сделать с UIApparance. Вы захотите сохранить любые пользовательские вещи, в которых вы сейчас делаете drawRect: Поскольку устройства Pre-IOS4 все равно будут использовать это, а не новый код UIApearance.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top