【发布时间】:2020-09-18 17:47:19
【问题描述】:
将我的手机更新到 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 中,此视图不存在。下面附上图片。
【问题讨论】:
-
您发布的代码非常通用,并且您没有提供太多关于您的单元格组件以及您正在使用它们做什么的信息。您发布的代码调用了您未显示的
setupCellWithEvent()方法。您确实显示了 UICollectionViewCell 子类的部分代码,但这看起来不完整。 (如果您使用dequeueReusableCell(withReuseIdentifier: for:)调用它,它的init?(coder:)方法将被调用,但您不支持该方法。 -
您是否尝试过使用 Xcode 视图调试工具查看您的视图层次结构是否有问题?
-
我已经完整地添加了
setupCellWithEvent函数,并将研究调试工具。谢谢!setupCellWithEvent不对单元格本身的属性做任何事情,而是更新单元格子视图的内容。我确实使用dequeueReusableCell调用,但是override init(frame: CGRect)在某些时候也会被调用,因为单元格具有角半径和背景颜色。 -
检查视图层次结构后,在单元格中所有内容的顶部直接放置了一个额外的
UIView。这不会出现在 iOS 13 中(如添加到问题中的图片所示)。同样的事情发生在我的表格视图单元格中。我将如何去寻找这个视图是如何到达那里的? -
感谢您的帮助,我用视图层次结构解决了问题并添加了答案。我还将编辑问题并仅粘贴复制问题所需的相关代码。
标签: ios uitableview uikit uicollectionviewcell ios14