美文网首页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