Изменения смещения содержимого UICollectionView при переходе приложения в фоновый режим и вращающемся устройстве - PullRequest
0 голосов
/ 18 октября 2018

У меня есть 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

    }
}
...