Xcode 12 和 iOS 14 中的手势问题

Posted

技术标签:

【中文标题】Xcode 12 和 iOS 14 中的手势问题【英文标题】:Problem with gesture in Xcode 12 and iOS 14 【发布时间】:2020-09-21 07:29:58 【问题描述】:

升级到 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 手势有误解。

【问题讨论】:

【参考方案1】:

我找到了答案。

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

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

 cell.addSubview(contentScollView)

UITableViewCellContentView 正在阻止手势。

改成

 cell.contentView.addSubview(contentScollView)

这解决了我的问题。

【讨论】:

感谢您这么快发现这一点!帮了大忙 Apple 在这个 iOS14 版本上真是惹恼了我。好眼力。在我的情况下,它是 UITableViewCell 内的 UICollectionView 哇,我不敢相信,这东西把我所有的应用程序都弄乱了。他们怎么会这样?! 哇,谢谢!我永远不会发现自己:) 有人知道如何在 OBJC 中修复吗?它的工作就像魅力,但在 iOS 14 之后它就不能工作了!【参考方案2】:

在目标 C 中:

[self.contentView addSubview: contentScollView];

【讨论】:

以上是关于Xcode 12 和 iOS 14 中的手势问题的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 11.0 模拟器滑动手势不起作用

ContextMenu 中的 NavigationLink 不再在 iOS14 xcode12 beta3 中工作?

从 Tab View Controller 切换到滑动手势时的 iOS Xcode 问题

SwiftUI:带有onTapGesture的列表单元格内的菜单触发手势

(Firebase Xcode 12 iOS 14)如何正确调用和设置孩子?

XCUItest addUIInterruptionMonitor 未在 iOS14 模拟器和 xcode 12 上捕获警报