导航栏进入混乱状态

时间:2015-03-24 06:38:31

标签: ios objective-c ios7

此错误最初是在iOS 7中找到的,它也可以在iOS 8中重现。

有三个视图控制器A,B和C.由UINavigationController管理。我想隐藏控制器A的导航栏,而不是其他人。

这是我为控制器A编写的代码。

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    self.navigationController.navigationBarHidden = YES;
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];

    self.navigationController.navigationBarHidden = NO;
}

当用户通过导航backBarButtonItem回来时,它对我来说很好。但是当用户从左侧滑动backwardsforward时(实际上并不是从控制器B向后转到控制器A,而是最后停留在控制器B中),导航栏将陷入困惑SATE。

以下是演示此问题的演示:[演示]:https://github.com/heistings/NavigationTest

这个问题可以通过禁用导航控制器的interactivePopGestureRecognizer来解决,但不能说它是完美的:

self.navigationController.interactivePopGestureRecognizer.enabled = NO;

3 个答案:

答案 0 :(得分:3)

animated属性用于YES

- (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];
}

也许这会对你有帮助。

答案 1 :(得分:1)

这可能是解决此问题的最佳方式,因为我们从框架中获得了animated

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    [self.navigationController setNavigationBarHidden:YES animated:animated];
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];

    [self.navigationController setNavigationBarHidden:NO animated:animated];
}

答案 2 :(得分:0)

我遇到了你的问题。 首先将导航控制器嵌入ViewController ......

  1. 点击故事板......
  2. 点击View Controller ...
  3. 转到编辑部分。
  4. 单击“嵌入”,然后单击导航控制器。
  5. 然后编写以下代码:

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