首页 > 解决方案 > 应用程序转到后台和旋转设备时的 UICollectionView 内容偏移更改

问题描述

我有带有分页的 UICollectionView。单元格是屏幕的大小,所以我每页有一个单元格。我有collectionView(_ collectionView: UICollectionView, targetContentOffsetForProposedContentOffset proposedContentOffset: CGPoint) -> CGPoint实施的。当设备处于前台时,旋转效果很好。但是当应用程序进入后台并且设备改变方向并且应用程序返回前台时,已经有两个部分可见的单元格。我需要的是相同的单元格来显示在进入背景之前可见。单元格的大小是正确的。只有偏移量是错误的。我尝试在进入后台之前保存最后一个单元格索引并在进入前台时滚动到它,但如果在后台双击主页按钮以查看打开的应用程序,我仍然遇到问题 - 该应用程序将显示两个部分可见细胞。这是一些代码,但是当应用程序处于后台并且设备旋转时,似乎不会调用此代码:

extension SlideshowViewController : UICollectionViewDelegate {
    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

    }
}

标签: iosuicollectionviewlandscape-portrait

解决方案


推荐阅读