在模拟器上旋转iPhone时,UICollectionViewCell大小调整问题

时间:2019-05-31 23:51:55

标签: ios swift cocoa-touch swift3

目前,我正在执行一项任务,该任务是根据内部标签扩展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,但是我仍然需要调用此方法。

1 个答案:

答案 0 :(得分:0)

使用viewWillTransition方法

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
        super.viewWillTransition(to: size, with: coordinator)
        self.collectionView.collectionViewLayout.invalidateLayout()
    }