Я видел много постов, где это решается по горизонтали, однако у меня возникают проблемы с реализацией решения для вертикального представления коллекции.
Ячейки моего представления коллекции заполняют всю ширину, но не всю высоту представления коллекции, поэтому обычная подкачка не работает. Я пытаюсь привязать центр ячеек к центру экрана при прокрутке с помощью пользовательского UICollectionViewFlowLayout
. (Аналогично каналу в Instagram, но без «бесплатной» прокрутки, а сообщения располагаются по центру по вертикали)
class FeedLayout: UICollectionViewFlowLayout {
private var previousOffset: CGFloat = 0
private var currentPage: Int = 0
override func targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint, withScrollingVelocity velocity: CGPoint) -> CGPoint {
guard let collectionView = collectionView else {
return super.targetContentOffset(forProposedContentOffset: proposedContentOffset, withScrollingVelocity: velocity)
}
let itemsCount = collectionView.numberOfItems(inSection: 0)
if previousOffset > collectionView.contentOffset.y {
currentPage = max(currentPage - 1, 0)
} else if previousOffset < collectionView.contentOffset.y {
currentPage = min(currentPage + 1, itemsCount - 1)
}
let updatedOffset = ((collectionView.frame.height * 0.75) + minimumLineSpacing) * CGFloat(currentPage)
previousOffset = updatedOffset
return CGPoint(x: proposedContentOffset.x, y: updatedOffset)
}
}