UICollectionView布局-转到另一个视图控制器后设备方向更改

时间:2018-09-10 13:02:03

标签: ios swift uicollectionview uicollectionviewlayout

我有一个UICollectionViewhorizontal scrollingpaging。单元格应始终为屏幕尺寸,因此,当设备方向发生变化时,会调用collectionView.collectionViewLayout.invalidateLayout(),并重新计算item sizecollection view offset,它会很好地工作。

当转到另一个视图控制器,然后旋转并返回到具有集合视图的视图控制器时,会发生此问题。然后,看来集合视图没有考虑方向变化或类似情况,并且可能有两个可见的单元格,这是不应该发生的。回到带有集合视图的视图控制器时,还会出现一些奇怪的动画。这些应该如何解决?

以下是一些代码:

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

    super.viewWillTransition(to: size, with: coordinator)

    collectionView.collectionViewLayout.invalidateLayout()
    coordinator.animate(alongsideTransition: { (context) in

    }) { (context) in

    }

}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return collectionView.frame.size
}

func collectionView(_ collectionView: UICollectionView, targetContentOffsetForProposedContentOffset proposedContentOffset: CGPoint) -> CGPoint {

    let width = collectionView.frame.size.width
    let visibleCells = collectionView.visibleCells
    if visibleCells.count == 0 {
        return CGPoint.zero
    }
    let cell = visibleCells[0]
    let indexPath = collectionView.indexPath(for: cell)
    let index = indexPath?.item
    let offsetX = CGFloat(index!) * width
    let offsetY: CGFloat = 0
    let offset = CGPoint(x: offsetX, y: offsetY)

    return offset

}

尝试解决此问题,我在viewDidAppear中打了以下电话,但没有运气:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    collectionView.collectionViewLayout.invalidateLayout()
    collectionView.layoutSubviews()
}

0 个答案:

没有答案