目前,我正在执行一项任务,该任务是根据内部标签扩展UICollectionView单元。为此,我以编程方式编写了约束。调整大小发生在此调用期间。
override func preferredLayoutAttributedFitting(_ layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes {
setNeedsLayout()
layoutIfNeeded()
let size = contentView.systemLayoutSizeFitting(layoutAttributes.size)
var frame = layoutAttributes.frame
frame.size.width = ceil(size.width)
layoutAttributes.frame = frame
return layoutAttributes
}
此代码按预期工作正常,但是,当我尝试旋转时,在旋转之前未出现的单元格不会为它们扩展。
我可以在cellForRowAtIndex上进行任何调用吗,或者在其他地方强制每次调用此preferredLayout?
或者有没有比这更简单的过程来避免这种计算并直接更新像元大小?我已经在布局中更新了estimateSize,但是我仍然需要调用此方法。
答案 0 :(得分:0)
使用viewWillTransition方法
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
self.collectionView.collectionViewLayout.invalidateLayout()
}