CoderMJLee / MJRefresh

An easy way to use pull-to-refresh.
MIT License
13.8k stars 3.55k forks source link

present出一个模态控制器(非fullScreen),控制器中的tableView下拉刷新总是触发系统的dismiss #1584

Open jps2782316 opened 1 year ago

jps2782316 commented 1 year ago

描述bug present出一个模态控制器(非fullScreen),控制器中的tableView下拉刷新总是触发系统的dismiss手势,就算将系统dismiss手势禁掉或者设置self.isModalInPresentation = true,只要tableView滑倒顶部再继续下拉,还是会触发dismiss手势效果,而不是触发tableView的下拉刷新。但是如果用系统的UIRefreshControl,滑到顶部后是可以触发下拉刷新的。(实际测试后是tableView.panGestureRecognizer导致的dismiss效果)

必现/偶发? 必现

怎么样重现这个bug

  1. present出目标制器
    let vc = GestureTestViewController()
    let navi = UINavigationController(rootViewController: vc)
    self.present(navi, animated: true)
  2. 禁掉系统模态控制器的dismiss手势(此时如果页面上没有tableView的话,已经无法下拉dismiss了)
    let pv = self.navigationController?.presentationController
    let recognizers = pv?.presentedView?.gestureRecognizers
    let dismissPan = recognizers?.first(where: { $0 is UIPanGestureRecognizer }) as? UIPanGestureRecognizer
    recognizers?.forEach({ $0.isEnabled = false })

    3.给tableView添加刷新头

    tableView.mj_header = CustomRefreshHeader(refreshingBlock: {[weak self] in
       print("....")
    })

    4.执行下拉刷新,触发的是dismiss效果,而不是刷新效果

你期望的结果是什么? 希望tableView滑到顶部后,是触发下拉刷新,而不是控制器的dismiss

截图

运行环境

额外的 最好能提供出现bug的Demo