13

I have a problem after upgrading to Xcode 12 and iOS 14.

Scenario: I have a Nested UITableView: nestedTableView. Like below

class GAllowGestureEventPassTableView: UITableView, UIGestureRecognizerDelegate {

    var allowGestureEventPassViews: [UIView] = []
    
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        panGestureRecognizer.cancelsTouchesInView = false
        guard let otherView = otherGestureRecognizer.view else { return false }
        print("tableView  : \(type(of: otherView))")
        if allowGestureEventPassViews.contains(otherView) {
            print("allowGestureEventPassViews contains  : \(type(of: otherView))")
            print("gesture pass  ")
            return true
        } else {
            return false
        }
    }
}

Then I add another UITableView to nestedTableView's allowGestureEventPassViews array. so I can control which tableView can be scroll.

    self.nestedTableView.allowGestureEventPassViews.append(controller.tableView)

In Xcode 11.7, iOS 14 worked just fine.

Log:

tableView  : GAllowGestureEventPassTableView
tableView  : GAllowGestureEventPassTableView
tableView  : GAllowGestureEventPassTableView
tableView  : UITableView
allowGestureEventPassViews contains  : UITableView
gesture pass  

but after upgrading to Xcode 12 gesture seen to be different. In Xcode 12 The gesture never pass through the nestedTableView.

tableView  : GAllowGestureEventPassTableView
tableView  : GAllowGestureEventPassTableView
tableView  : GAllowGestureEventPassTableView
tableView  : UITableViewCellContentView

Does anyone has the same problem? or an I misunderstand something about iOS14 gesture.

Django Free
  • 491
  • 4
  • 10

2 Answers2

36

I found the answer.

In iOS14 some reason, UITableViewCellContentView hierarchy is different.

In tableView(_:cellForRowAt:) I add subview

 cell.addSubview(contentScollView)

UITableViewCellContentView is blocking the gesture.

Change to

 cell.contentView.addSubview(contentScollView)

This solve my problem.

Django Free
  • 491
  • 4
  • 10
0

In Objective C:

[self.contentView addSubview: contentScollView];
Ryan M
  • 18,333
  • 31
  • 67
  • 74