UICollectionView Rotation旋转后布局不正确

时间:2019-06-11 06:02:33

标签: ios swift uicollectionview rotation

我有一个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
    )
}

这在我的iPhone应用程序中非常有效

enter image description here

未启用旋转的位置。在iPad上,在纵向模式下可以正常工作。

enter image description here

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

enter image description here

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

enter image description here

我希望重新绘制单元格,以便当应用在旋转视图中旋转或增长并缩小时,所有7个单元都适合放在一行中。我应该如何正确处理?

1 个答案:

答案 0 :(得分:1)

将其添加到您的UIViewController类中

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

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()

    guard let Coll_Layout = collVwPhotos.collectionViewLayout as? UICollectionViewFlowLayout else {
        return
    }
    Coll_Layout.invalidateLayout()
}