无法再与iOS 14中的UICollectionViewCell或UITableViewCell内的内容交互
将手机更新到iOS 14后,我无法再与我的应用程序的无法再与iOS 14中的UICollectionViewCell或UITableViewCell内的内容交互,ios,uitableview,uikit,uicollectionviewcell,ios14,Ios,Uitableview,Uikit,Uicollectionviewcell,Ios14,将手机更新到iOS 14后,我无法再与我的应用程序的UICollectionViewCell或UITableViewCell内的内容进行交互。这个问题也存在于运行iOS 14的iOS模拟器中,但在iOS 13及以下版本中一切正常 我在单元格中有按钮和其他集合视图,它们不再可以交互。就好像整个单元格内容都是静态的。下面是我的UICollectionViewCells和UICollectionViewController中的一些代码,但是UITableViewCells中存在相同的问题。我用的是Sw
UICollectionViewCell
或UITableViewCell
内的内容进行交互。这个问题也存在于运行iOS 14的iOS模拟器中,但在iOS 13及以下版本中一切正常
我在单元格中有按钮和其他集合视图,它们不再可以交互。就好像整个单元格内容都是静态的。下面是我的UICollectionViewCells
和UICollectionViewController
中的一些代码,但是UITableViewCells
中存在相同的问题。我用的是Swift 5didSelectItemAt
和类似的功能工作正常,它在单元格的contentView
中进行交互,特别是似乎不起作用。我可以粘贴更多的代码,如果必要的话,因为我修剪了一些绒毛和其他代码,我已经缩小到不是一个问题
由于这个问题在UICollectionViewCell
和UITableViewCell
中都存在,我认为我在更基本的层面上做错了什么
来自UICollectionViewCell
的相关代码:
override init(frame: CGRect) {
super.init(frame: frame)
setupContainers()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func setupContainers() {
// Adding subviews like so...
addSubview(subviewToAdd)
// Anchor all subviews using NSConstraints
}
然后从UICollectionViewController
override func viewDidLoad() {
super.viewDidLoad()
setStyleAndDelegates()
}
private func setStyleAndDelegates() {
collectionView?.backgroundColor = UIColor.white
collectionView?.delegate = self
collectionView?.dataSource = self
collectionView?.register(MyCell.self, forCellWithReuseIdentifier: eventCellId)
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: eventCellId, for: indexPath) as! MyCell
return cell
}
编辑:
进一步检查视图层次结构后,在iOS 14中,有一个附加的UIView
直接放置在单元格中所有内容的顶部。在iOS 13中,此视图不存在。照片附在下面。
感谢@Duncan C推荐您查看视图层次结构 只需通过
addSubview()
相反,应该使用contentView.addSubview()
将内容添加到单元格的contentView
。这解决了问题
在我当前的设置中,在iOS 13及以下版本中,仅使用addSubview()
添加的内容出现在单元格的contentView
上方。问题中的图片更好地描述了这一点
在iOS 14和我当前的设置中,此内容被插入到单元格的
contentView
下面,因此contentView
阻止用户与直接添加到单元格的其余内容交互。您发布的代码非常通用,你还没有提供太多关于细胞成分的信息,以及你在用它们做什么。您发布的代码调用了一个未显示的setupCellWithEvent()
方法。您确实显示了UICollectionViewCell子类的部分代码,但看起来不完整。(如果您使用dequeueReusableCell(withReuseIdentifier:for:)
调用它,那么它的init?(编码器:)
方法将被调用,但您不支持该方法。您是否尝试使用Xcode视图调试工具查看视图层次结构是否有问题?我已完整添加了setupCellWithEvent
函数,并将查看调试工具。谢谢。setupCellWithEvent
没有不要对单元格本身的属性做任何事情,而是更新单元格子视图的内容。我确实使用dequeueReusableCell
调用,但是覆盖init(frame:CGRect)
在某些时候也会被调用,因为单元格具有角半径和背景色。检查视图层次结构后,会有一个附加的UIView
直接放置在单元格中所有内容的顶部。这在iOS 13中不会出现(如添加到问题中的图片所示)。在我的表视图单元格中也会发生同样的情况。我将如何查找此视图是如何到达那里的?感谢您的帮助,我使用视图层次结构解决了问题,并添加了答案。我还将编辑问题,并仅粘贴复制问题所需的相关代码。这非常有用,在过去的3天中一直在使用。