Макет потока представления коллекции, не использующий правильную ширину ячейки - PullRequest
1 голос
/ 04 июня 2019

У меня есть пользовательский 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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...