在 Swift - iOS 中将 UIView 上的手势转移到 UITableView

Transfer gestures on a UIView to a UITableView in Swift - iOS

我的布局在页面顶部有一个 UIView,在它的正下方,我有一个 UITableView

我想要做的是将 UIView 上的手势交互转移到 UITableView,因此当用户在 UIView 上拖动 up/down ],UITableView 垂直滚动。

我尝试了以下代码

tableView.gestureRecognizers?.forEach { uiView.addGestureRecognizer([=12=]) }

但它以某种方式从 UITableView 中删除了 gestureRecognizers :/


Obs.: UIView 不能是 UIScrollView

Header

这很棘手

有什么问题?

Your top view is not allowed to pass through view behind it...

可能的解决方案是什么

  1. 将所有触摸传递到它后面的视图(似乎不可能或实际上非常困难)
  2. 告诉 window 忽略顶视图上的触摸(简单)

第二个选项更好更简单。

所以你需要做的是创建 UIViewoverride

的子class
 override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView?  

和 return 如果您在 hitTest 操作

上发现相同的视图,则为零

这里是测试和工作示例

class PassThroughME : UIView {
    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        return super.hitTest(point, with: event) == self ? nil : self
    }
}

就是这样,现在使用 PassThroughME 可以通过将 class 添加到情节提要中的视图或以编程方式添加视图的任何方式

检查图像,我有黑色视图,顶部有 0.7 alpha,我仍然可以滚动

希望对您有所帮助