UICollectionViewCell的子视图的宽度和高度为零

时间:2017-03-25 13:38:11

标签: ios autolayout uicollectionview uicollectionviewcell

我一直坚持这个问题,我想在自动布局完成后在"P143": [ { "snaktype": "value", "property": "P143", "datavalue": { "value": { "entity-type": "item", "numeric-id": 206855, "id": "Q206855" }, "type": "wikibase-entityid" }, "datatype": "wikibase-item" } ] 中的CALayer上设置框架,角半径和其他操作。但令我惊讶的是,单元格的子视图和contentView在单元格的子类中每次UICollectionViewCell都出现(0.0, 0.0, 0.0, 0.0)。我终于找到了解决这个问题的方法并发布了它,所以如果你遇到类似的问题,每个人都可以看一下。

1 个答案:

答案 0 :(得分:2)

我现在已经敲了一个多星期了,但最后!这对我来说非常有用:

实施collectionView(_:willDisplay:forItemAt:)的{​​{1}}功能,并为UICollectionViewDelegate即将显示的单元格的contentView触发新的布局周期。

<强>夫特:

collectionView

<强>目标-C:

func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
     cell.contentView.setNeedsLayout()
     cell.contentView.layoutIfNeeded()
}

这似乎是非常繁琐的操作,但每次集合视图插入新单元格并强制执行自动布局时,单元格的- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { [cell.contentView setNeedsLayout]; [cell.contentView layoutIfNeeded]; } 通常在初始布局周期后frame(如观察到的那样)在(0.0, 0.0, 0.0, 0.0))但是如果在单元格显示在屏幕上之前手动触发布局,layoutSubviews()中观察到的frame个子视图是您希望在自动布局周期完成后预期的。

确保在layoutSubviews()中触发autolayout而不仅仅是单元格本身这个手动触发器可能看起来很麻烦,但是我得到的最好。