【发布时间】: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)。
标签: xcode swift uicollectionview uicollectionviewcell nib