这是我的layout

我有一个UICollectionView,其单元格中嵌入了UICollectionViews。在iPad上,当我旋转屏幕时,可以通过覆盖来使父UICollectionView的布局无效

func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)


这很好。但是,我不确定如何将此触发器重定向到单个单元格内的UICollectionViews。

到目前为止,我已经尝试通过func layoutSubviews()使那些UICollectionViews的布局无效。这不是非常一致,因为某些单元格仍具有旧版式。但是,这:

func willTransition(from oldLayout: UICollectionViewLayout, to newLayout: UICollectionViewLayout)


在这种情况下根本不会被触发。

我还尝试在嵌入式UICollectionViews的流布局中使用func shouldInvalidateLayout(forBoundsChange newBounds: CGRect) -> Bool

我没有使用自动调整大小的单元格,即通过

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize


解决此问题以获得一致结果的最干净方法是什么?

感谢这方面的任何指示。

最佳答案

您是否尝试在父单元格的每个UIView中覆盖以下方法?

override public func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
            super.traitCollectionDidChange(previousTraitCollection)

            collectionView.collectionViewLayout.invalidateLayout()
        }

10-08 15:43