一个额外的 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 上工作正常的主要内容,如果未能解决你的问题,请参考以下文章