一个额外的 UITableViewCellContentView 覆盖出现在 iOS 14 上的 TableView 中,防止点击,但在 iOS 13 上工作正常

Posted

技术标签:

【中文标题】一个额外的 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 【发布时间】:2020-09-17 06:16:34 【问题描述】:

在使用 XCode 12 编译的 ios 14 设备上,额外的 UITableViewCellContentView 出现在表格视图的内容上方,防止其下方的任何按钮被点击。这仅出现在 iOS 14 中。它不会出现在 iOS 13 中。关于如何删除它的任何想法?

【问题讨论】:

【参考方案1】:

您必须像这样将视图添加到单元格内容视图中:

contentView.addSubview(button)

并将您的按钮锚定到 contentView:

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

【讨论】:

这就完成了。您的回复暗示该问题将在所有 iOS 10+ 上发生,但该问题仅在 iOS 14 上出现。 我遇到了同样的问题,在 contentView 上添加子视图而不是视图对我有用。但是,您添加的关于锚点的代码在这里没有意义。 @RaviDamani 你为什么说这意味着问题会发生在 iOS 10+ 上? 对不起,你说的完全正确。您的代码修复了它!【参考方案2】:

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

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

【讨论】:

【参考方案3】:

我也遇到过同样的问题,但我不确定我的解决方案是否适合您。我的问题是由 iOS14 中两次调用 UISearchControllerDelegate 方法 presentSearchController 引起的。调用此方法时,我们在当前视图上叠加了一个新的“containerView”并显示了我们的搜索结果。当 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


【讨论】:

【参考方案4】:

遇到同样的问题,我们这样做了:

sendSubviewToBack(contentView)

【讨论】:

【参考方案5】:

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

只需在属性管理器中为您的单元格启用 clips to bounds 或以编程方式将此 bool 设为 true。现在单元格底部的额外视图不会被覆盖并出现。

【讨论】:

【参考方案6】:

试试这个代码

contentView.isUserInteractionEnabled = true

【讨论】:

以上是关于一个额外的 UITableViewCellContentView 覆盖出现在 iOS 14 上的 TableView 中,防止点击,但在 iOS 13 上工作正常的主要内容,如果未能解决你的问题,请参考以下文章

一个额外的 BarButtonItem

额外域控制器的额外域控制器的安装

UICollectionView - 删除额外的间距

不能在额外的类中外包 UICollectionViewDatasource

如何为 OSX 菜单额外启用复制和粘贴

额外的滚动条如何删除?