额外的 UITableViewCellContentView 叠加层出现在 iOS 14 的 TableView 中以防止点击,但在 iOS 13 上工作正常

An extra UITableViewCellContentView overlay appears in a TableView on iOS 14 preventing taps, but works fine on iOS 13

在使用 XCode 12 编译的 iOS 14 设备上,一个额外的 UITableViewCellContentView 出现在 table 视图的内容上方,防止其下方的任何按钮被点击。这只出现在 iOS 14。它没有出现在 iOS 13。关于如何删除它的任何想法?

您必须像这样将您的视图添加到单元格 contentView:

contentView.addSubview(button)

并将您的按钮锚定到 contentView:

button.topAnchor.constraint(equalTo: contentView.topAnchor).isActive = true

我遇到了同样的问题,但我不确定我的解决方案是否适合您。我的问题是由 UISearchControllerDelegate 方法 presentSearchController 在 iOS14 中被调用两次引起的。调用此方法时,我们将一个新的“containerView”叠加到我们当前的 View 上并显示我们的搜索结果。当 didDismissSearchController 被调用时,我们删除了这个视图。问题是 presentSearchController 被调用了两次,这创建了两个“containerViews”。我们会移除其中一个,但另一个停留在附近并拦截了我们所有的接触。我们只需要确保不添加两个“containerViews”。

这是我们所做的

func presentSearchController(_ searchController: UISearchController) { 

   guard containerView == nil else {return}

   containerView = UIView()
   viewController.view.addSubview(containerView)

   //present search results

}

func didDismissSearchController(_ searchController: UISearchController) { 

   containerView.removeFromSuperview()
   containerView = nil

   //any other code you need

}

试试这个代码

contentView.isUserInteractionEnabled = true

有同样的问题,我们是这样做的:

sendSubviewToBack(contentView)

如果您的项目很大并且很难将每个 addSubview 更改为 contentView.addSubview,您可以将此扩展添加到您的项目中:

extension UITableViewCell {
    open override func addSubview(_ view: UIView) {
        super.addSubview(view)
        sendSubviewToBack(contentView)
    }
}

我最近在 iOS 14.5 中遇到了这个问题。愿我的修复有助于节省其他人的时间。

只需在属性管理器中为您的单元格启用 clips to bounds 或以编程方式使此 bool 为真。现在单元格底部的额外视图不会叠加显示。