UICollectionView Rotation 旋转后布局不正确

Son*_*les 2 rotation ios uicollectionview swift

我有一个 UICollectionView,它的宽度正好是 7 个单元格,中间没有填充。我通过添加没有中间或行间距的流布局并计算宽度来完成此操作,如下所示:

public func collectionView(
    _ collectionView: UICollectionView, 
    layout collectionViewLayout: UICollectionViewLayout, 
    sizeForItemAt indexPath: IndexPath
) -> CGSize {
    return CGSize(
        width: self.frame.width / CGFloat(7), 
        height: self.frame.height - headerHeight
    )
}
Run Code Online (Sandbox Code Playgroud)

这在我的 iPhone 应用程序中运行得非常好

在此输入图像描述

未启用旋转的地方。在 iPad 上,当处于纵向模式时,效果很好。

在此输入图像描述

旋转时,首先应用程序不会重绘,我尝试使Layout无效,但这并没有解决问题。我必须向下滚动,然后得到以下布局

在此输入图像描述

当我点击一个单元格时,它会重新绘制,但添加了填充,将第七个单元格向下推到另一行。

在此输入图像描述

我希望重新绘制单元格,以便当应用程序在分割视图中旋转或放大和缩小时,所有 7 个单元格都可以放在一行上。我应该如何正确处理这个问题?

Nik*_*ani 5

将其添加到您的UIViewController班级中

当您更改设备方向时,它会自动调整您的布局。

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
        
    guard let columnLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout else {
        return
    }
    columnLayout.invalidateLayout()
}
Run Code Online (Sandbox Code Playgroud)