Xcode 12 和 iOS 14 中的手势问题

Problem with gesture in Xcode 12 and iOS 14

升级到 Xcode 12 和 iOS 14 后出现问题。

场景: 我有一个嵌套的 UITableView:nestedTableView。喜欢下面

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
        }
    }
}

然后我将另一个 UITableView 添加到 nestedTableView 的 allowGestureEventPassViews 数组。这样我就可以控制哪个tableView可以滚动了。

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

在 Xcode 11.7 中,iOS 14 工作正常。

日志:

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

但升级到Xcode 12 手势后,感觉不一样了。 在 Xcode 12 中,手势永远不会通过 nestedTableView

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

有没有人遇到同样的问题?或者我对 iOS14 手势有一些误解。

我找到了答案。

由于iOS14某些原因,UITableViewCellContentView层次结构不同。

tableView(_:cellForRowAt:)中添加子视图

 cell.addSubview(contentScollView)

UITableViewCellContentView 正在阻止手势。

改为

 cell.contentView.addSubview(contentScollView)

这解决了我的问题。

在Objective C中:

[self.contentView addSubview: contentScollView];