额外的 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 为真。现在单元格底部的额外视图不会叠加显示。
在使用 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 为真。现在单元格底部的额外视图不会叠加显示。