我在iOS 8中遇到了这个问题,其中导航栏的错误背景图像会在以下任何情况下显示:
YES
(默认),导航控制器以模态显示。NO
,状态栏最初是隐藏的。在这种情况下,导航控制器不需要以模态方式呈现以显示错误的图像。 要隔离基于视图控制器的状态栏外观设置为YES(默认)并且导航控制器以模态方式显示的问题,我按照以下步骤从头创建了一个测试项目:
使用" Master-Detail Application"创建一个新项目。模板。
打开Main.storyboard
并向其添加导航控制器。删除其根视图控制器并使用模态segue 连接主视图控制器。然后将Detail View Controller连接为其根视图控制器。你应该得到这样的东西:
通过外观代理自定义导航栏背景。使用两个不同的图像作为纵向(UIBarMetricsDefault
)和横向(UIBarMetricsCompact
)。我在UIImage
上使用了一个类别来创建纯色图像。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageWithColor:[UIColor redColor]] forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageWithColor:[UIColor blueColor]] forBarMetrics:UIBarMetricsCompact];
return YES;
}
运行该应用。主视图控制器显示纵向和横向方向的右侧导航栏背景图像:
现在以模态方式显示详细信息视图控制器。为此,请点击"添加"按钮,然后选择新创建的行。详细信息视图控制器显示右侧导航栏背景图像。
旋转界面。详细视图控制器将不更改导航栏背景图像(错误):
还有其他人在努力解决这个问题吗?
答案 0 :(得分:2)
是的,我一直在努力解决这个问题,在我在目标的plist文件中添加"View controller-based status bar appearance"
后,它再次在iOS 8上运行,请记住将其设置为NO
。
在MasterViewController中,添加此项以避免在关闭detailViewController时出现错误的背景图像。它基本上再次设置相同的外观。
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageWithColor:[UIColor redColor]] forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageWithColor:[UIColor blueColor]] forBarMetrics:UIBarMetricsCompact];
}