微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法再与iOS 14中的UICollectionViewCell或UITableViewCell中的内容进行交互

如何解决无法再与iOS 14中的UICollectionViewCell或UITableViewCell中的内容进行交互

将手机更新为iOS 14之后,我无法再与我的应用在UICollectionViewCellUITableViewCell中的内容进行交互。运行iOS 14的iOS模拟器中也存在该问题,但在iOS 13及更低版本上一切正常。

我在不再可交互的单元格中有按钮和其他集合视图。好像整个单元格内容已变为静态。以下是来自我的UICollectionViewCellsUICollectionViewController的一些代码,但是UITableViewCells中存在相同的问题。我使用的是Swift 5。didSelectItemAt和类似的函数可以正常工作,它正在单元格的contentView中进行交互,尤其是似乎无法正常工作。如果有必要,我可以粘贴更多代码,因为我修剪了一些绒毛,缩小了范围以至于没有问题的其他代码

由于UICollectionViewCellUITableViewCell中都存在此问题,所以我认为我在更根本的层面上做错了事。

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中,此视图不存在。图片附在下面。

iOS 13 as expected

iOS 14 with additional view

解决方法

感谢@Duncan C建议您看一下视图层次结构。

仅通过addSubview()

将内容添加到单元格中

相反,应使用contentView将内容添加到单元格的contentView.addSubview()。这解决了这个问题。

在我当前的设置下,在iOS 13及更低版本中,仅用addSubview()添加的内容出现在单元格contentView上方。问题中显示的图片对此有更好的描绘。

在iOS 14中,按照我当前的设置,此内容再次插入到单元格的contentView下,因此contentView阻止用户与直接添加到该单元格中的其余内容进行交互单元格。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。