UICollectionViewCell没有子视图(除了contentView),直到它被添加到任何父视图

时间:2015-12-04 07:04:10

标签: xcode swift uicollectionview uicollectionviewcell nib

首先,这是我发现的唯一可能相关的问题: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故事板:

Storyboard source code

正如您所看到的,<collectionViewCell>中的第一个视图是一个关键字为contentView的视图,而我的标签(您只能看到第一个)是它的子视图。

为什么世界上没有任何子视图存在,直到将单元格添加到父视图后为什么不将子视图添加到contentView?两者必须相关,对吗?

1 个答案:

答案 0 :(得分:1)

好的,请记住不了解Size Classes。我禁用了它,单元格现在按预期显示了子视图:enter image description here

鉴于单元格不知道其父级的大小,它是有意义的,因此它不知道要渲染的约束/视图。这也解释了为什么单元格在添加到任何父级后会有子视图(因此可以推断其大小)。

这是一款iPad应用,因此我不需要尺寸等级。

我希望这有助于某人。