2017-10-19 18 views
0

J'ai une vue de collection horizontale. Essentiellement, le premier élément affiché est l'élément "actif". Et glisser sur les boutons pour chaque élément. Le problème que j'ai est que je dois être en mesure de faire défiler le dernier élément pour enclencher tout le chemin vers l'avant. Actuellement, lorsque vous faites glisser vers la fin, il ne colle plus à la première cellule. Je suis désolé si je n'ai aucun sens. Essentiellement, toutes les cellules restantes de la cellule doivent s'aligner sur 0,0 de collectionView. Qui fonctionne actuellement parfaitement pour les 2 premières cellules. Mais après cela, il frappe les limites et ne lui permet pas de casser. Je veux être capable de glisser et la dernière cellule s'enclenche à 0,0UICollectionView accrochage à 0,0 - défilement des limites passées

Merci!

problème Voir ici:

enter image description here

Voici ma sous-classe de mise en page:

class UserFlowLayout: UICollectionViewFlowLayout { 
    required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) } 

    override init() { 
     super.init() 
     scrollDirection = .horizontal 
     itemSize = CGSize(width: 70, height: 90) 
     minimumInteritemSpacing = 15.0 
     minimumLineSpacing = 15.0 
    } 

    override func targetContentOffset(forProposedContentOffset proposedContentOffset: CGPoint, withScrollingVelocity velocity: CGPoint) -> CGPoint { 
     guard let collectionView = collectionView else { return super.targetContentOffset(forProposedContentOffset: proposedContentOffset, withScrollingVelocity: velocity) } 

     var offsetAdjustment = CGFloat.greatestFiniteMagnitude 
     let horizontalOffset = proposedContentOffset.x + collectionView.contentInset.left 

     let targetRect = CGRect(x: proposedContentOffset.x, y: 0, width: collectionView.bounds.size.width, height: collectionView.bounds.size.height) 

     let layoutAttributesArray = super.layoutAttributesForElements(in: targetRect) 

     layoutAttributesArray?.forEach({ (layoutAttributes) in 
      let itemOffset = layoutAttributes.frame.origin.x 
      if fabsf(Float(itemOffset - horizontalOffset)) < fabsf(Float(offsetAdjustment)) { 
       offsetAdjustment = itemOffset - horizontalOffset 
      } 
     }) 

     return CGPoint(x: proposedContentOffset.x + offsetAdjustment, y: proposedContentOffset.y) 
    } 

} 

Répondre

0

Me semble qu'il essaie de faire défiler vers la droite que possible. Vous devez élargir votre vue de défilement pour inclure l'espace vide sur la droite.

Votre largeur d'écran actuelle semble être de 4 cellules + X, vous avez donc besoin de + X d'espace vide après votre dernière cellule.