UICollectionViewCell 在添加到任何父视图之前没有子视图(除了 contentView)
Posted
技术标签:
【中文标题】UICollectionViewCell 在添加到任何父视图之前没有子视图(除了 contentView)【英文标题】:UICollectionViewCell has no subviews (besides contentView) until it is added to any parent view 【发布时间】:2015-12-04 07:04:10 【问题描述】:首先,这是我发现的唯一可能相关的问题:viewWithTag in UICollectionViewCell returns nil in Swift (until cell is reused)
我正在使用 Xcode 7.1.1,实际上我的故事板中有另一个 UIcollectionView
可以正常工作。我找不到有效的和这个之间没有区别。
这是证明我疯狂的代码(来自 cellForItemAtIndexPath 内部):
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("VariantCell", forIndexPath: indexPath)
let cellBeforeCount = cell.subviews.count
let contentBeforeCount = cell.contentView.subviews.count
self.view.addSubview(cell)
let cellAfterCount = cell.subviews.count
let contentAfterCount = cell.contentView.subviews.count
print("\(cellBeforeCount) \(contentBeforeCount) \(cellAfterCount) \(contentAfterCount)")`
cellBeforeCount == 1, contentBeforeCount = 0, cellAfterCount == 4, contentAfterCount == 0
这是这个 VC 的 XML 故事板:
如您所见,<collectionViewCell>
中的第一个视图是键为 contentView
的视图,而我的标签(您只能看到第一个)是它的子视图。
为什么在将单元格添加到父视图之后才会存在子视图,为什么不将子视图添加到 contentView?两者应该有关系吧?
【问题讨论】:
这行'self.view.addSubview(cell)'的目的是什么? 只是为了表明我的单元格中没有子视图,直到它具有父视图之后。我对我的单元格进行了子类化,并且从awakeFromNib
内部它没有子视图。但是,从内部layoutSubviews
他们都在那里。正是这个事实让我想到,也许直到单元格真正落入另一个视图之前,它才有自己的子视图。为了测试这个假设,我只是将单元格添加到我能想到的第一个视图中(恰好是 self.view)。
【参考方案1】:
好吧,把它归结为不理解大小类。我禁用了它,单元格现在有预期的子视图:
考虑到单元格不知道其父级的大小,因此它不知道要呈现哪些约束/视图是有道理的。这也解释了为什么单元格在添加到任何父级后会有子视图(因此可以推断其大小)。
这是一个 iPad 应用,所以我不需要 Size Classes。
我希望这对某人有所帮助。
【讨论】:
以上是关于UICollectionViewCell 在添加到任何父视图之前没有子视图(除了 contentView)的主要内容,如果未能解决你的问题,请参考以下文章
无法将 UILabel 添加到 UICollectionViewCell
如何将子视图添加到自定义 UICollectionViewCell
将子视图添加到 UICollectionViewCell 时出现意外行为
将子视图添加到 UICollectionViewCell 子类?