UINavigationContoller interactivePopGestureRecognizer inactive when navigation bar is hidden

后端 未结 5 675
长发绾君心
长发绾君心 2021-02-01 07:04

I have a view controller which is nested within a UINavigationController.

I have implemented the iOS 7 interactivePopGestureRecognizer to enable the user to

相关标签:
5条回答
  • 2021-02-01 07:19

    I used this. self.navigationController.interactivePopGestureRecognizer.delegate = self;

    also in my UINavigationController class to disable interactivePopGestureRecognizer during transitions.

    - (void)pushViewController:(UIViewController *)viewController
                  animated:(BOOL)animated
    {
        if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
            self.interactivePopGestureRecognizer.enabled = NO;
    }
    
        [super pushViewController:viewController animated:animated];
    }
    
    - (void)navigationController:(UINavigationController *)navigationController
           didShowViewController:(UIViewController *)viewController
                        animated:(BOOL)animated
    {
        if ([navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
            // disable interactivePopGestureRecognizer in the rootViewController of navigationController
            if ([[navigationController.viewControllers firstObject] isEqual:viewController]) {
                navigationController.interactivePopGestureRecognizer.enabled = NO;
            } else {
                // enable interactivePopGestureRecognizer
                navigationController.interactivePopGestureRecognizer.enabled = YES;
            }
        }
    }
    

    the reason of disable interactivePopGestureRecognizer in rootViewController is:when swipe from edge in rootViewController and then tap something to push in next viewController, the UI won't accept any touches now.Press home button to put app in background , and then tap it to enter foreground...

    0 讨论(0)
  • 2021-02-01 07:25

    Simple solution

    Just set the hidden property of the navigation bar not through navigation controller

    Just use these two lines

    self.navigationController.navigationBarHidden = NO;
    self.navigationController.navigationBar.hidden = YES;
    
    0 讨论(0)
  • 2021-02-01 07:25

    Adding these two lines to -(void)viewDidAppear:(BOOL)animated worked for me.

    self.navigationController.navigationBarHidden = NO;
    self.navigationController.navigationBar.hidden = YES;
    

    And dont forget to call <UIGestureRecognizerDelegate> to .h file.

    0 讨论(0)
  • 2021-02-01 07:27

    This doesn't seem to work for me. I followed Keithl's blog post. Neither did that work.

    I ultimately settled with UISwipeGestureRecognizer. It seems to do what it says.

    UISwipeGestureRecognizer *gestureRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(backButtonPressed:)];
    [gestureRecognizer setDirection:(UISwipeGestureRecognizerDirectionRight)];
    [self.navigationController.view addGestureRecognizer:gestureRecognizer];
    
    0 讨论(0)
  • 2021-02-01 07:33

    Set your UIViewController subclass as the gestureRecognizer's delegate:

    self.navigationController.interactivePopGestureRecognizer.delegate = self;
    

    That's it!

    0 讨论(0)
提交回复
热议问题