我一直坚持这个问题,我想在自动布局完成后在"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)
。我终于找到了解决这个问题的方法并发布了它,所以如果你遇到类似的问题,每个人都可以看一下。
答案 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而不仅仅是单元格本身这个手动触发器可能看起来很麻烦,但是我得到的最好。