2017-04-17 2 views
1

Ich habe eine collectionView, die zurück in die erste Zelle zurückkehrt, wenn ich auf der zweiten Seite auf eine neue Zelle tippen.UICollectionView Scroll-Problem mit Paging nach dem Tippen aktiviert

Obwohl es die zweite Seite sein sollte, bekomme ich Seite 0.0 in der zweiten und 0.0 in der ersten Seite.

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { 

     let pageWidth = collectionCustom.frame.size.width 
     let page = floor((collectionCustom.contentOffset.x - pageWidth/2)/pageWidth) + 1 

     print("Page number: \(page)") 

    } 

Ich habe nichts in der didSelectItem Methode geschieht, also warum soll ich das Scroll bekommen?

func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: (inout CGPoint)) { 

     let pageWidth: Float = Float(collectionCustom.frame.width) 
     // width + space 
     let currentOffset: Float = Float(collectionCustom.contentOffset.x) 
     let targetOffset: Float = Float(targetContentOffset.x) 
     var newTargetOffset: Float = 0 
     if targetOffset > currentOffset { 
      newTargetOffset = ceilf(currentOffset/pageWidth) * pageWidth 
     } 
     else { 
      newTargetOffset = floorf(currentOffset/pageWidth) * pageWidth 
     } 
     if newTargetOffset < 0 { 
      newTargetOffset = 0 
     } 
     else if newTargetOffset > Float(collectionCustom.contentSize.width) { 
      newTargetOffset = Float(collectionCustom.contentSize.width) 
     } 

     targetContentOffset.x = CGFloat(currentOffset) 
     collectionCustom.setContentOffset(CGPoint(x: CGFloat(newTargetOffset), y: CGFloat(0)), animated: true) 

     var index: Int = Int(newTargetOffset/pageWidth) 

     var cell: UICollectionViewCell? = collectionCustom.cellForItem(at: IndexPath(item: index, section: 0)) 

     cell = collectionCustom.cellForItem(at: IndexPath(item: index + 1, section: 0)) 

     } 

    } 
+0

bekommen sollten Können Sie mehr Beschreibung des Verhaltens fügen Sie erleben und das gewünschte Verhalten? – nathan

+0

Nichts in dem Code, den Sie in die Frage eingegeben haben, verursacht das Problem. Sie müssen mehr Code hinzufügen oder versuchen, es selbst zu debuggen und einige weitere Debug-Informationen hinzuzufügen. – Fogmeister

+0

Ich möchte, dass die 'collectionView' 4 Zellen pro Seite zeigt, was richtig geht, aber wenn ich zwischen 5 und 7 Zellen habe, wird die nächste Seite im Protokoll nicht angezeigt, und deshalb werde ich zurückgescrollt die erste Zelle. Es funktioniert gut mit 8 Objekten und gleich mit Vielfachen von 4. Idealerweise würde ich gerne 3 Zellen sehen, wenn ich 7 Objekte habe, und so weiter, aber es zeigt mir ständig 4 an. – Christian

Antwort

2

Wenn Sie auf der aktuellen Seite wollen, als Sie Ihnen Seite von Scrollview wie dieses

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) { 

    let pageNumber = round(scrollView.contentOffset.x/collectionCustom.frame.width) // You can change width according you 
    pageControl.currentPage = Int(pageNumber) 

} 
+0

Das hat tatsächlich für mich funktioniert. Vielen Dank! – Christian

+0

@Christian Willkommen Kumpel –

Verwandte Themen