我在 iOS 8 中遇到了这个问题,其中导航栏的背景图像在以下任何一种情况下都会显示错误:
- 基于视图控制器的状态栏外观设置为
YES
(默认),并且导航控制器以模态方式呈现。 - 基于视图控制器的状态栏外观设置为
NO
,状态栏最初是隐藏的。在这种情况下,导航控制器不需要以模态方式呈现来显示错误的图像。
为了隔离基于视图控制器的状态栏外观设置为 YES(默认)并且以模态方式呈现导航控制器的问题,我按照以下步骤从头开始创建了一个测试项目:
使用“Master-Detail Application”模板创建一个新项目。
打开
Main.storyboard
并向其添加导航控制器。移除它的根视图控制器并用模态 segue连接主视图控制器。然后连接细节视图控制器作为它的根视图控制器。你应该得到这样的结果:
通过外观代理自定义导航栏背景。
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; }
运行应用程序。主视图控制器为纵向和横向显示右侧导航栏背景图像:
现在以模态方式呈现细节视图控制器。为此,请点击“添加”按钮,然后选择新创建的行。详细视图控制器显示右侧导航栏背景图像。
旋转界面。详细视图控制器不会更改导航栏背景图像(错误):
- 将界面旋转回其原始方向。详细视图控制器将更改导航栏背景图像(错误):
有没有其他人为此而苦苦挣扎?