How to disable back swipe gesture in UINavigationController on iOS 7 How to disable back swipe gesture in UINavigationController on iOS 7 ios ios

How to disable back swipe gesture in UINavigationController on iOS 7


I found a solution:

Objective-C:

if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {    self.navigationController.interactivePopGestureRecognizer.enabled = NO;}

Swift 3+:
self.navigationController?.interactivePopGestureRecognizer?.isEnabled = false


I found out setting the gesture to disabled only doesn't always work. It does work, but for me it only did after I once used the backgesture. Second time it wouldn't trigger the backgesture.

Fix for me was to delegate the gesture and implement the shouldbegin method to return NO:

- (void)viewDidAppear:(BOOL)animated{    [super viewDidAppear:animated];    // Disable iOS 7 back gesture    if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {        self.navigationController.interactivePopGestureRecognizer.enabled = NO;        self.navigationController.interactivePopGestureRecognizer.delegate = self;    }}- (void)viewWillDisappear:(BOOL)animated{    [super viewWillDisappear:animated];    // Enable iOS 7 back gesture    if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {        self.navigationController.interactivePopGestureRecognizer.enabled = YES;        self.navigationController.interactivePopGestureRecognizer.delegate = nil;    }}- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{    return NO;}


Just remove gesture recognizer from NavigationController. Work in iOS 8.

if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)])    [self.navigationController.view removeGestureRecognizer:self.navigationController.interactivePopGestureRecognizer];