起因:
之前一直沒有遇到類似問題,最近遇到項目UI視圖經(jīng)??ㄋ垃F(xiàn)象,一直沒找到必現(xiàn)條件,后面發(fā)現(xiàn)在rootViewController頁面觸發(fā)側滑返回pop操作,再push就會卡死,定位到是側滑手勢導致的。
分析:
因為我們的navigationController是自定義的,所以系統(tǒng)的側滑返回手勢會被禁掉,項目需要我們執(zhí)行以下代碼,把側滑手勢打開
@implementation DDNavigationController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
__weak typeof(self) weakself = self;
if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
self.interactivePopGestureRecognizer.delegate = (id)weakself;
}
}
@end
此時,如果我們在rootViewController里面執(zhí)行側滑手勢,相當于執(zhí)行了一個pop操作(只是我們沒有看到效果),然后接著再去執(zhí)行push,自然就push不到下一級頁面了。
解決方法:
判斷當前頁面是不是根視圖,如果是就禁止掉側滑返回手勢,如果不是就打開,代碼如下(在DDNavigationController中實現(xiàn)):
#pragma mark - UIGestureRecognizerDelegate
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
if (gestureRecognizer == self.interactivePopGestureRecognizer) {
// 屏蔽調(diào)用rootViewController的滑動返回手勢
if (self.viewControllers.count < 2 || self.visibleViewController == [self.viewControllers objectAtIndex:0]) {
return NO;
}
}
return YES;
}
。