关于界面跳转时Navigationbar的白条问题

在开发中我们有的界面需要隐藏导航栏 ,而下个界面则不需要隐藏导航栏

这个时候我们可以在这两个方法中来实现导航栏的隐藏和出现

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:YES];
}
- (void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    [self.navigationController setNavigationBarHidden:NO];
}

这个时候我想细心的同学会发现,当push到下个页面的时候,会出现白条,会给人一种卡顿的感觉。这是因为我们在隐藏导航栏的时候没有加入动画,我们只要把上面隐藏导航栏的方法换成带动画的就好了

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:YES];
}

- (void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
    [self.navigationController setNavigationBarHidden:NO animated:YES];
}

这时我们会发现 ,在界面跳转的时候如丝般顺滑了。

这是我们一个界面需要隐藏一个界面不需要隐藏的情况,还有另外一种情况,就是当我们两个界面都需要隐藏的时候,再用这个方法的时候,会发现还是会出现白条,原因是因为两次隐藏导航栏之间有一个不隐藏导航栏。

这时候我们如果想自由的控制当前页面的导航栏出现和隐藏的话,我们可以在我们基类的ViewController里加上一个变量来控制。

基类里可以这么写

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:self.hideNavgaitonbar animated:animated];
}

然后我们就可以随心所欲的控制导航栏的出现和隐藏了

- (void)viewWillAppear:(BOOL)animated
{
    self.hideNavgaitonbar = YES;
    [super viewWillAppear:animated];
}

到这里算是解决了目前的需求,如果有什么更好的方法,欢迎大家交流

你可能感兴趣的:(关于界面跳转时Navigationbar的白条问题)