[iOS]隐藏NavigationBar但是不隐藏NavigationItem

今天看到飞哥他们做的app,有一个界面是这样的:NavigationBar是透明的,但是Navigation上面的按钮还在,然后就想着实现了一下这个效果,毕竟很炫酷。

先看效果图吧

首先是第一个页面

[iOS]隐藏NavigationBar但是不隐藏NavigationItem_第1张图片
Simulator Screen Shot 2016年1月22日 下午12.02.37.png

然后第二个页面

[iOS]隐藏NavigationBar但是不隐藏NavigationItem_第2张图片
Simulator Screen Shot 2016年1月22日 下午12.02.39.png

最后跳回第一个页面

[iOS]隐藏NavigationBar但是不隐藏NavigationItem_第3张图片
Simulator Screen Shot 2016年1月22日 下午12.02.37.png

接下来说说实现

其实跳转什么的都是和平时一样,要实现这个效果,首先是要设定NavigationController的代理,在代理里面进行处理。

我这里把代理设置为第二个页面了

代码如下

实现代理方法:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    //如果是当前控制器,则隐藏背景;如果不是当前控制器,则显示背景
    if (viewController == self) {
        for (UIView *view in [self.navigationController.navigationBar subviews]) {
            if ([view isKindOfClass:NSClassFromString(@"_UINavigationBarBackground")]) {
                
                //最好使用隐藏,指不定什么时候你又想让他出现
                view.hidden = YES;
                
                //如果不想让它一直出现,那么可以移除
//                [view removeFromSuperview];
            }
        }
    } else {
        for (UIView *view in [self.navigationController.navigationBar subviews]) {
            if ([view isKindOfClass:NSClassFromString(@"_UINavigationBarBackground")]) {
                view.hidden = NO;
            }
        }
    }
}
解释
  • _UINavigationBarBackground这个就是Navigation的背景视图,我们要实现效果,主要就是对他进行处理。

你可能感兴趣的:([iOS]隐藏NavigationBar但是不隐藏NavigationItem)