美文网首页IOS知识整理UI 界面运行时
隐藏NavigationBar时的一个坑

隐藏NavigationBar时的一个坑

作者: 李俊峰 | 来源:发表于2015-04-26 15:52 被阅读18905次

    最近工作踩坑不少,又踩了一个。
    需求是这样的,只在首页隐藏Navigation Bar,其他页面都不隐藏。
    我在第一个视图控制器里写下了如下代码:

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

    这样写导致的结果就是当你右滑返回一部分,再回来点击push到下一个页面,导航栏会混乱,本来该显示下一个页面的标题,结果变成了上一个页面的标题,如果你在这个页面进行其他的操作很可能导致崩溃,因为系统还以为是在上一个页面。
    正确的写法应该是下面这样。

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

    相关文章

      网友评论

      • 嗯_挺好的:666,回头我也总结总结隐藏的坑
      • Saffiy:第一次好评!!!
      • 贺彦文:太厉害了 我很想知道楼主是怎么知道这样解决的 太神奇了 这都能想到
      • Barry_小闪:你真棒
      • 你不诚实啊:半天没解决的问题, 居然因为这个, nice
      • 笙笔记:早点看到就好了
      • JQ__:完美解决我的问题 :smile:
      • 75ca452096d2:支持滑动,animated必须为YES, 否则还是会出现问题。
        Ego_1973:@黄泉的救赎 对的,它也会根据动画去执行操作和判断
      • liwb: [super viewWillDisappear:animated];
        [self.navigationController setNavigationBarHidden:NO animated:animated];这两行代码掉换一下顺序 这样写 效果是不是一样的(pop 和 push都是)?
        叶先森_iOS_前端:@晋先森 Great !
        Yaanco:@晋先森 这两个交换顺序的话,有什么区别呀,
        60343a0ad510:@liwb good !
      • o0下一站生活0o:我很多页面需要来回隐藏显示,按照你这个办法,导航栏会出现很难看的东西。
        李某lkb:恩,其实这个动画我是很想要的.不过难看的东西怎么弄掉呢.
        Smicro:@o0下一站生活0o 设置navigationBar.hidden = YES。这个会不会好些
        Zd_silent:@o0下一站生活0o 你有解决办法么?我的也是这样~

      本文标题:隐藏NavigationBar时的一个坑

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