UINavigationbar теряет установленное изображение при вращении - PullRequest
3 голосов
/ 07 января 2012

У меня есть приложение, которое начинается с рута UINavigationController.Затем этот контроллер выдвигает и выводит различные другие UIViewControllers - все работает нормально.

Мое приложение имеет пользовательскую графику для navigationController.navigationBar.backgroundImage.Есть одно изображение для платформы iPhone.Для платформы iPad есть два изображения - одно для портрета, другое для пейзажа.IPad является платформой для выпуска, поскольку он вращается, платформа iPhone только для портрета.

Я уже написал код в -(void)willRotateToInterfaceOrientation: для определения поворота и установил navigationBar.backgroundImage в правильную ориентацию графики,если платформа iPad.

В симуляторе iPad 5.0 - работает нормально;вращение iPad на экране приводит к правильной графике навигационной панели независимо от ориентации.

На устройстве - это не работает - Изображение отображается правильно при запуске устройства iPad в портретной ориентации.Когда я поворачиваюсь в альбомную ориентацию, панель навигации меняется на стандартную серую.Когда я поворачиваю назад, серые «палочки».

Я пытался позвонить setNeedsDisplay - без изменений.

Я попытался установить navigationBar.tintColor = [UIColor clearColor] - без изменений.

Я проверил, что имена файлов графики в коде идентичны фактическим именам файлов - они являются

Код для поворота:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
    return YES; }
return (interfaceOrientation == UIInterfaceOrientationPortrait);

}

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) {
        UIImage *titleImage = [UIImage imageNamed:@"StandardHeaderIpadLandscape"];
        self.navigationController.navigationBar.tintColor = [UIColor clearColor];
        [self.navigationController.navigationBar setBackgroundImage:titleImage forBarMetrics:UIBarMetricsDefault];
        self.navigationController.view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"StandardBackgroundiPadLandscape.png"]];
        [self.navigationController.navigationBar setNeedsDisplay];
    } else {
        UIImage *titleImage = [UIImage imageNamed:@"StandardHeaderIpadPortrait"];
         self.navigationController.navigationBar.tintColor = [UIColor clearColor];
        [self.navigationController.navigationBar setBackgroundImage:titleImage forBarMetrics:UIBarMetricsDefault];
        self.navigationController.view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"StandardBackgroundiPad.png"]];
        [self.navigationController.navigationBar setNeedsDisplay];
    }
}

}

1 Ответ

1 голос
/ 07 января 2012

Проверьте, является ли titleImage нулем. У меня такое чувство, что пути к вашим изображениям неверны или эти изображения неправильно скопированы на iPad.

...