繁体   English   中英

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

[英]Width and height of UICollectionViewCell 's subviews is zero

我一直被困在这个问题上,我想在UICollectionViewCell布局完成后在UICollectionViewCell中的CALayer上设置框架,拐角半径和其他操作。 但是令我惊讶的是(0.0, 0.0, 0.0, 0.0)每次在单元的子类中调用layoutSubviews()时,单元的子视图及其contentView都出现(0.0, 0.0, 0.0, 0.0) layoutSubviews() 我终于找到了解决此问题的方法并将其发布,因此如果您遇到类似的问题,每个人都可以查看一下。

我已经敲了一个多星期了,但是终于! 这对我来说是完美的:

实施collectionView(_:willDisplay:forItemAt:)的功能UICollectionViewDelegate ,引发新的布局周期为contentView单元格中的的collectionView即将显示。

迅速:

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

Objective-C的:

- (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) 0.0、0.0、0.0、0.0 (0.0, 0.0, 0.0, 0.0) (如layoutSubviews() ),但是如果在单元格即将出现在屏幕上之前手动触发布局,则您希望在自动布局循环完成后在layoutSubviews()中观察到的子视图frame s。

确保在contentView触发自动布局,而不仅仅是在单元格本身中触发。此手动触发可能看起来很麻烦,但这是我所能做到的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM