[英]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.