【问题标题】:Setting Navigation Bar Apperance设置导航栏外观
【发布时间】:2015-11-10 21:17:32
【问题描述】:

我应该在哪里设置导航栏的外观?

我有一个名为“MainVC”的视图控制器,它嵌套在导航控制器中。在“MainVC”中,我覆盖 viewWillAppear 并将导航控制器导航栏的背景颜色设置为黄色。但是,当我启动应用程序时,颜色未设置为黄色

当我从 MainVC 导航到另一个 VC,然后返回 MainVC 时,颜色设置正确!!

为什么会发生这种情况,我应该在哪里添加代码以便在 MainVC 中正确设置导航栏的背景颜色?

谢谢!

【问题讨论】:

    标签: ios uinavigationcontroller uinavigationbar


    【解决方案1】:

    如果您将导航外观项放在 mainVC 的 init 方法以及 ViewWillAppear 中,它将起作用,如下所示:

    -(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self==nil)
            return nil;
        [[[self navigationController] navigationBar] setTranslucent:YES];
        [[[self navigationController ] navigationBar] setBarTintColor:[UIColor clearColor]];
        return self;
    }
    
    -(void)viewWillAppear:(BOOL)animated
    {
         [super viewWillAppear:animated];
         [[[self navigationController] navigationBar] setTranslucent:YES];
         [[[self navigationController ] navigationBar] setBarTintColor:[UIColor clearColor]];
    }
    

    无需设置任何其他内容,只需将其全部保存在您的 mainVC 的实现文件中,它就会工作,祝您好运。哦,是的,另一方面,这就是为什么它有效:

    ViewDidLoad 将在导航堆栈中被调用一次,直到它从堆栈中弹出,因此您使用导航控制器所需的属性初始化视图控制器,您可以对每个视图控制器执行此操作以控制导航栏的看法。在将视图加载到屏幕上之前将它放在 init 方法中设置它,然后将它放在你的 viewWillAppear 中设置它,以便当你从视图控制器转换到堆栈上的视图控制器时,假设这个视图控制器是仍然在堆栈上,viewWillAppear 会将导航栏更改回您想要的样式。所以,这个视图控制器第一次加载到堆栈上时,导航栏样式会发生两次,没什么大不了的,但从那时起,它只会发生一次,当它再次出现在导航堆栈上时.

    【讨论】:

    • 感谢您的解释 - 非常有帮助。为什么要把它放在 initWithNibName 而不是 viewDidLoad 中?
    • aka - 为什么不放入 viewDidLoad + viewWillAppear?
    • 你可以把它放在viewDidLoad中,没关系,我把它放在init方法中的原因很复杂,它必须做一些非常激进的UIViewController的子类化,谁是Parent UIViewController是视图控制器协调并设置所有视图控制器属性。问题是导航栏和导航控制器本身是在Parent的viewdidload的viewdidload中设置的,我应该对此更清楚,但重点是尽管如此,将它放在init方法中是可以的,如果你不要像这样使用 init,然后 viewdidload 会做
    【解决方案2】:

    在 MainVC 中设置,在您设置 Navigation 的地方开始 Navigation

    在 ViewDidLoad 方法中

    self.navigationController.navigationBar.barTintColor=ColorNav;
    self.navigationController.navigationBar.translucent=FALSE;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多