У меня есть пользовательский UICollectionViewFlowLayout
, ниже:
class SnapCollectionViewFlowLayout: UICollectionViewFlowLayout {
override func targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint, withScrollingVelocity velocity: CGPoint) -> CGPoint {
// Page width used for estimating and calculating paging.
let pageWidth = self.itemSize.width + self.minimumLineSpacing
// Make an estimation of the current page position.
let approximatePage = self.collectionView!.contentOffset.x/pageWidth
// Determine the current page based on velocity.
let currentPage = (velocity.x < 0.0) ? floor(approximatePage) : ceil(approximatePage)
// Create custom flickVelocity.
let flickVelocity = velocity.x * 0.3
// Check how many pages the user flicked, if <= 1 then flickedPages should return 0.
let flickedPages = (abs(round(flickVelocity)) <= 1) ? 0 : round(flickVelocity)
// Calculate newHorizontalOffset.
let newHorizontalOffset = ((currentPage + flickedPages) * pageWidth) - self.collectionView!.contentInset.left
return CGPoint(x: newHorizontalOffset, y: proposedContentOffset.y)
}
}
Однако self.itemSize.width
возвращает значение 50.0
, а не фактическую ширину ячейки.
Коллекцияу меня есть горизонтальный сборный вид с ячейками динамической ширины / высоты (в частности, это пропорции 16: 9, поэтому это зависит от размера экрана).
Как использовать правильные itemSize
ширина, чтобы отразить реальную ширину ячейки?
Вот моя sizeForItemAt
функция из класса представления коллекции:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let imageWidth = UIScreen.main.bounds.width
let imageHeight = imageWidth / (16 / 9)
return CGSize(width: imageWidth, height: imageHeight)
}