UINavigationbar在旋转时丢失设置图像

时间:2012-01-07 14:11:17

标签: objective-c uinavigationcontroller rotation navigationbar

我有一个以根UINavigationController开头的应用。然后该控制器推送并弹出其他各种UIViewControllers - 一切正常。

我的应用有navigationController.navigationBar.backgroundImage的自定义图片。 iPhone平台有一个图像。 iPad平台有两个图像 - 一个用于纵向,一个用于横向。 iPad是旋转时的问题平台,iPhone平台只是纵向。

如果平台是iPad,我已经在-(void)willRotateToInterfaceOrientation:中编写代码来检测旋转,并将navigationBar.backgroundImage设置为正确的方向图。

在iPad 5.0模拟器中 - 它工作正常;无论方向如何,在屏幕上旋转iPad都会产生正确的navigationBar图形。

在设备上 - 它不起作用 - 图像在iPad设备上以正面方式正确显示。当我旋转到横向时,navigationBar会变为标准灰色。当我向后旋转灰色的“棍棒”时。

我试过调用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 个答案:

答案 0 :(得分:1)

检查titleImage是否为零。我感觉您的图像路径不正确,或者这些图像未正确复制到iPad。