2016-11-20 8 views
0

Ich habe das Paging in meiner Sammlungsansicht aktiviert und dabei die erste Ausgabe jedes Swipe-Vorgangs gefunden, der nicht auf einer anderen Zelle als auf der Seite angehalten wurde.Swift CollectionView Vertikale Paging-Funktion

Ich habe dann versucht, Code einzugeben und die Auslagerung manuell in ScrollViewWillEndDecelerating zu behandeln. Mein Problem ist jedoch das Ändern der Collectionviews ContentOffset oder Scrollen zu einem Punkt beide funktionieren nicht, wenn sie in LayoutSubiews aufgerufen werden. das ist der einzige Ort, an dem sie das CollectionView bewirken.

Jede Zelle in meiner Sammlungsansicht ist Vollbild. Ich kümmere mich um die Zellengröße in Layout-Subviews.

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 

    if let layout = customCollectionView.collectionViewLayout as? UICollectionViewFlowLayout { 
     let itemWidth = view.frame.width 
     let itemHeight = view.frame.height 
     layout.itemSize = CGSize(width: itemWidth, height: itemHeight) 
     layout.invalidateLayout() 
    } 


    let ip = IndexPath(row: 2, section: 0) 

    view.layoutIfNeeded() 
    customCollectionView.scrollToItem(at: ip, at: UICollectionViewScrollPosition.centeredVertically, animated: true) 

    let point = CGPoint(x: 50, y: 600) 
    customCollectionView.setContentOffset(point, animated: true) 

} 


func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) { 

    let pageHeight = customCollectionView.bounds.size.height 
    let videoLength = CGFloat(videoArray.count) 

    let minSpace:CGFloat = 10 

    var cellToSwipe = (scrollView.contentOffset.y)/(pageHeight + minSpace) + 0.5 
    if cellToSwipe < 0 { 
     cellToSwipe = 0 
    } 
    else if (cellToSwipe >= videoLength){ 
     cellToSwipe = videoLength - 1 
    } 
    let p = Int(cellToSwipe) 
    let roundedIP = round(Double(Int(cellToSwipe))) 
    let ip = IndexPath(row: Int(roundedIP), section: 0) 

    let ip = IndexPath(row: 2, section: 0) 
    view.layoutIfNeeded() 
    customCollectionView.scrollToItem(at: ip, at: UICollectionViewScrollPosition.centeredVertically, animated: true) 


} 

Antwort

2

First off, würde ich empfehlen, Ihre View-Controller-Klasse UICollectionViewDelegateFlowLayout und verwenden Sie die folgende Delegatmethode der Größe anpassen zu machen Ihre UICollectionViewCells

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
    let size = CGSize(width: view.frame.width, height: view.frame.height) 
    return size 
} 

Dann in Ihrem viewDidLoad Anruf

customCollectionView.isPagingEnabled = true 
Verwandte Themen