美文网首页iOS相关
完美的自定义导航的思路

完美的自定义导航的思路

作者: iOS_Ru | 来源:发表于2018-02-06 17:30 被阅读11次

    实现自定义导航确实有好多种办法
    1.可以修改系统原生导航的透明度 这样可以有系统动画的效果
    2.可以自定义个view 然后把系统的导航条隐藏条
    以上两中方法 有时候避免不了一个问题 就是侧滑控制器 回看见导航条的闪烁 动画不够优美

    我现在的这个思路可以完美解决这个问题
    1.我采取的是上面的第二种方法
    核心代码是- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:YES animated:YES]; }然后再viewDidLoad里面添加自定的的view导航
    在 viewWillDisAppear里面调用[self.navigationController setNavigationBarHidden:NO animated:YES];但是如果是两个相邻的控制器都需要自定义导航 有的调转到有导航的页面 有的跳转的没有导航的页面 就会在什么时候去隐藏导航和显示导航 很头疼
    2.我想到了一个方法 一般我们搭建的框架都会自定义一个控制器 比如取名BaseViewController然后 自定义其他控制器的时候都集成与这个控制器.
    BaseViewController里添加个属性

    /** 是否自定义导航的NavBar */
    @property (nonatomic, assign) BOOL userDefinedNavBar;
    

    然后再BaseViewController 的- (void)viewWillAppear:(BOOL)animated这么写

    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
        //判断是否隐藏导航
        if (self.userDefinedNavBar) {
            [self.navigationController setNavigationBarHidden:YES animated:YES];
        }else {
            [self.navigationController setNavigationBarHidden:NO animated:YES];
        }
    }
    

    3.在用到自定义的控制器里的viewDidLoad方法里面把这个标识符置为YES

    - (void)viewDidLoad {
        [super viewDidLoad];
        //需要自定义导航
        self.userDefinedNavBar = YES; 
    }
    

    然后就看你自定义的导航是什么效果了 想怎么自定义导航都行 而且还有系统侧滑的动画效果 而且再也不会出现导航闪烁的问题了

    以下是我实现的一个小demo 如有问题可以联系我 邮箱rujianbin@163.com
    demo地址github

    相关文章

      网友评论

        本文标题:完美的自定义导航的思路

        本文链接:https://www.haomeiwen.com/subject/jmogzxtx.html