【问题标题】:Wrong background image for navigation bar导航栏的背景图片错误
【发布时间】:2014-10-26 17:02:00
【问题描述】:

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

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

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

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

  2. 打开Main.storyboard 并向其添加导航控制器。移除它的根视图控制器并用 modal 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. 将界面旋转回其原始方向。详细视图控制器将更改导航栏背景图像(错误):

还有其他人为此苦苦挣扎吗?

【问题讨论】:

    标签: ios uinavigationcontroller ios8 uinavigationbar uibarmetrics


    【解决方案1】:

    是的,我一直在努力解决这个问题,在目标的 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];
    }
    

    【讨论】:

    • +1。这几乎解决了问题(如果您愿意放弃基于视图控制器的状态栏外观)。现在,当 Detail 视图控制器旋转时,会显示 right 导航栏背景图像。但是,当 Detail 视图控制器关闭时(至少旋转一次之后),Master 视图控制器会显示 错误 导航栏背景图像(直到界面再次旋转)。你也有同样的遭遇吗?
    • 感谢您与我分享您的知识。如果状态栏最初隐藏,这将解决问题。我接受了你的回答,尽管对于一个讨厌的错误来说,它更像是一个 hacky 的解决方法,而不是一个干净的解决方案。
    • 是的,状态栏最初隐藏时存在问题,需要做更多工作来解决所有问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多