如何解决无法再与iOS 14中的UICollectionViewCell或UITableViewCell中的内容进行交互
将手机更新为iOS 14之后,我无法再与我的应用在UICollectionViewCell
或UITableViewCell
中的内容进行交互。运行iOS 14的iOS模拟器中也存在该问题,但在iOS 13及更低版本上一切正常。
我在不再可交互的单元格中有按钮和其他集合视图。好像整个单元格内容已变为静态。以下是来自我的UICollectionViewCells
和UICollectionViewController
的一些代码,但是UITableViewCells
中存在相同的问题。我使用的是Swift 5。didSelectItemAt
和类似的函数可以正常工作,它正在单元格的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
将内容添加到单元格的contentView.addSubview()
。这解决了这个问题。
在我当前的设置下,在iOS 13及更低版本中,仅用addSubview()
添加的内容出现在单元格contentView
上方。问题中显示的图片对此有更好的描绘。
在iOS 14中,按照我当前的设置,此内容再次插入到单元格的contentView
下,因此contentView
阻止用户与直接添加到该单元格中的其余内容进行交互单元格。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。