iOS 视图 push 时,UI卡死问题

2023-02-06  本文已影响0人  zwing
起因:

之前一直没有遇到类似问题,最近遇到项目UI视图经常卡死现象,一直没找到必现条件,后面发现在rootViewController页面触发侧滑返回pop操作,再push就会卡死,定位到是侧滑手势导致的。

分析:

因为我们的navigationController是自定义的,所以系统的侧滑返回手势会被禁掉,项目需要我们执行以下代码,把侧滑手势打开

@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里面执行侧滑手势,相当于执行了一个pop操作(只是我们没有看到效果),然后接着再去执行push,自然就push不到下一级页面了。

解决方法:

判断当前页面是不是根视图,如果是就禁止掉侧滑返回手势,如果不是就打开,代码如下(在DDNavigationController中实现):

#pragma mark - UIGestureRecognizerDelegate
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
    if (gestureRecognizer == self.interactivePopGestureRecognizer) {
        // 屏蔽调用rootViewController的滑动返回手势
        if (self.viewControllers.count < 2 || self.visibleViewController == [self.viewControllers objectAtIndex:0]) {
            return NO;
        }
    }
    return YES;
}

上一篇 下一篇

猜你喜欢

热点阅读