Uicollectionview с разбивкой по страницам, которая работает как для портретной, так и для альбомной ориентации

У меня есть проект с UICollectionView, который требует подкачки. Я поставил horizontal scroll и paging enabled. MinimumInteritemSpacing равен 0. Мне нужно, чтобы ячейки были размером с представление коллекции, поэтому у меня есть:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    return collectionView.frame.size

}

При этом размеры ячеек будут правильными как для портретной, так и для альбомной ориентации, но смещение при изменении ориентации неправильное, и две ячейки будут отображаться одновременно. Что является хорошим подходом, чтобы иметь возможность видеть одну и ту же ячейку при изменении ориентации и чтобы она занимала все представление коллекции?

Я попытался реализовать collectionView(_:targetContentOffsetForProposedContentOffset:). Это решит проблему, если вы останетесь на одном экране, но при переходе на другой экран, повороте и возврате к экрану представления коллекции будет ошибка - снова будут две частично видимые ячейки и смещение не будет быть разыскиваемым. Вот почему я думаю, что должно быть другое решение этой проблемы.

попробуйте вызвать collectionView.collectionViewLayout.invalidateLayout() в viewWillTransitionToSize, это должно помочь

Sandeep Bhandari 31.10.2018 11:41

@SandeepBhandari Спасибо за ответ. Пробовал ваше предложение, но ничего не изменилось.

surToTheW 31.10.2018 11:52

Возможный дубликат UICollectionView contentOffset после поворота устройства

DonMag 31.10.2018 14:36

@DonMag Я проверил вышеуказанное решение, но оно работает не во всех случаях. Я отредактировал свой вопрос.

surToTheW 31.10.2018 14:47

@surToTheW - вы, вероятно, также захотите сохранить текущее смещение (или положение центральной ячейки?) в viewWillDisappear, а затем отрегулировать contentOffset, когда вы вернетесь в viewWillAppear

DonMag 31.10.2018 15:16

@DonMag Спасибо за предложение. Это сработает, если вы не перейдете на задний план, не перейдете от портрета к пейзажу и не вернетесь на передний план. Вы можете снова сохранить смещение и пересчитать при переходе на передний план, но дело в том, что если после поворота в фоновом режиме вы дважды щелкните кнопку домой, когда приложение находится в фоновом режиме, и посмотрите на приложение в открытых приложениях, оно покажет текущее состояние - и он снова сломается (две видимые ячейки)

surToTheW 31.10.2018 16:51
0
6
215
0

Другие вопросы по теме