设置导航栏外观

时间:2015-08-18 05:03:28

标签: ios uinavigationcontroller uinavigationbar

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

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

当我离开MainVC,转到另一个VC,然后回到MainVC时,颜色被正确设置!!

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

谢谢!

2 个答案:

答案 0 :(得分: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将在导航堆栈中被一次性调用,直到它从堆栈中弹出,因此您使用您想要的属性初始化视图控制器的导航控制器,您可以执行此操作这与每个viewcontroller控制navigaiotnbar的视图。在将视图加载到屏幕上之前将其置于init方法中,然后将其放入viewWillAppear中进行设置,以便当您从视图控制器转换到堆栈上的视图控制器时,假设此视图控制器是仍然在堆栈上,viewWillAppear会将导航栏更改回您想要的样式。所以,第一次将这个视图控制器加载到堆栈上时,navigaiton bar样式将发生两次,没什么大不了的,但从那时起,它只会在导航堆栈上再次出现时发生一次

答案 1 :(得分:0)

在MainVC中设置,在哪里开始导航,在其中设置了导航

在ViewDidLoad方法

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