2

我在 iOS 8 中遇到了这个问题,其中导航栏的背景图像在以下任何一种情况下都会显示错误:

  • 基于视图控制器的状态栏外观设置为YES(默认),并且导航控制器以模态方式呈现。
  • 基于视图控制器的状态栏外观设置为NO,状态栏最初是隐藏的。在这种情况下,导航控制器不需要以模态方式呈现来显示错误的图像。

为了隔离基于视图控制器的状态栏外观设置为 YES(默认)并且以模态方式呈现导航控制器的问题,我按照以下步骤从头开始创建了一个测试项目:

  1. 使用“Master-Detail Application”模板创建一个新项目。

  2. 打开Main.storyboard并向其添加导航控制器。移除它的根视图控制器并用模态 segue连接主视图控制器。然后连接细节视图控制器作为它的根视图控制器。你应该得到这样的结果:

在此处输入图像描述

  1. 通过外观代理自定义导航栏背景。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;
    }
    
  2. 运行应用程序。主视图控制器为纵向和横向显示右侧导航栏背景图像:

在此处输入图像描述

在此处输入图像描述

  1. 现在以模态方式呈现细节视图控制器。为此,请点击“添加”按钮,然后选择新创建的行。详细视图控制器显示右侧导航栏背景图像。

  2. 旋转界面。详细视图控制器不会更改导航栏背景图像(错误):

在此处输入图像描述

  1. 将界面旋转回其原始方向。详细视图控制器将更改导航栏背景图像(错误):

在此处输入图像描述

有没有其他人为此而苦苦挣扎?

4

1 回答 1

2

是的,我一直在努力解决这个问题,在我添加"View controller-based status bar appearance"目标的 plist 文件后,它在 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];
}
于 2014-10-27T11:36:30.810 回答