【问题标题】:UINavigationBar color changes unexpectedlyUINavigationBar 颜色意外更改
【发布时间】:2011-07-27 11:51:34
【问题描述】:

在我当前的 UINavigationController 中,viewControllers 堆栈看起来像这样。 1 -> 2 -> 3. 然而,在从第二个控制器过渡到第三个控制器之前,我先弹出第二个控制器,以便在弹出第三个控制器时,第一个控制器在顶部。

[self.navigationController popViewControllerAnimated:NO];
[self.navigationController pushViewController:controller animated:YES ] ;

但不知何故,这样做会将导航栏的颜色从原来的蓝色默认更改为黑色样式。在新控制器的 viewWillAppear 或 viewWillDisappear 中将 barStyle 显式设置为 UIBarStyleDefault 无效。奇怪的是,如果我完全设置 barStyle,即使是 1 -> 2 过渡也会导致条形颜色变为黑色。

在写完这篇文章的时候,我意识到下面的代码修复了它。

navBar.barStyle = UIBarStyleDefault-1;

为什么我需要从默认值中减去 1 才能真正获得默认颜色?

【问题讨论】:

  • 更重要的是,你到底是怎么发现这个的?
  • 在 viewWillAppear 中,我注意到将 barStyle 设置为 UIBarStyleDefault 会导致 UIBarStyleBlack,在枚举中为 +1,所以我认为它被关闭了。我还没有尝试在单独的项目中对此进行测试。
  • 什么是 NSLog(@"%i", UIBarStyleDefault);说?您可能以某种方式使自己陷入了这样一种情况,即您的代码和可可导航控制器库已使用定义此枚举的不同版本的头文件进行编译? (我不知道这是怎么发生的!)

标签: iphone uinavigationbar


【解决方案1】:

我也遇到了同样的问题。我没有正式的答案,但我以自己的方式解决了它:

-(void)viewWillAppear:(BOOL)animated { 
UIColor *navColor = [[UIColor alloc]initWithRed:0.742778 green:0.0181208 blue:0.0271147 alpha:1];
[self.navigationController.navigationBar setTintColor:navColor];}

我希望有人可以提出更好的答案。

【讨论】:

    【解决方案2】:

    我不会弹出第二个,只推第三个。当你解除第三次使用时

    [self.parentViewController.parentViewController popViewControllerAnimated:YES];
    

    这对我来说返回并清理堆栈并将我留在控制器 1 上而不显示控制器 2,并具有所有正常属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-24
      • 1970-01-01
      • 2013-10-06
      • 2018-10-08
      • 2012-11-23
      相关资源
      最近更新 更多