ios - CollectionView Cell gets shifted to right after horizontal Scrolling -


i have collectionview cell of same size of collectionview i.e. 1 cell @ time displayed on screen , want minimum separation of 10 between cells, problem when scroll cell cells aren't fitting whole screen, , shifting of cell increased after every scroll. (check screenshots better understanding)

this 3rd cell

this 6th cell

enter image description here

i assume have set pagingenabled collection view. inherits property uiscrollview (because uicollectionview subclass of uiscrollview).

the problem collection view uses own width (320 points in post) width of page. each of cells same width collection view, have 10 point “gutter” between cells. means distance left edge of cell 0 left edge of cell 1 320 + 10 = 330 points. when scroll show cell 1, collection view stops scrolling @ offset 320 (its own width), cell 1 starts @ offset 330.

the easiest fix turn off pagingenabled , implement paging overriding scrollviewwillenddragging(_:withvelocity:targetcontentoffset:) in collection view delegate, this:

override func scrollviewwillenddragging(_ scrollview: uiscrollview, withvelocity velocity: cgpoint, targetcontentoffset: unsafemutablepointer<cgpoint>) {     guard let flowlayout = collectionviewlayout as? uicollectionviewflowlayout else { return }      let pagewidth = scrollview.bounds.size.width + flowlayout.minimuminteritemspacing      let currentpagenumber = round(scrollview.contentoffset.x / pagewidth)     let maxpagenumber = cgfloat(collectionview?.numberofitems(insection: 0) ?? 0)      // don't turn more 1 more page when decelerating, , don't go beyond first or last page.     var pagenumber = round(targetcontentoffset.pointee.x / pagewidth)     pagenumber = max(0, currentpagenumber - 1, pagenumber)     pagenumber = min(maxpagenumber, currentpagenumber + 1, pagenumber)     targetcontentoffset.pointee.x = pagenumber * pagewidth } 

you'll want set item size match device screen size, , set deceleration rate fast:

override func viewwilllayoutsubviews() {     super.viewwilllayoutsubviews()      guard let flowlayout = collectionviewlayout as? uicollectionviewflowlayout, let collectionview = collectionview else { return }     flowlayout.itemsize = collectionview.bounds.size      collectionview.decelerationrate = uiscrollviewdecelerationratefast } 

result:

demo


Comments

Popular posts from this blog

php - Permission denied. Laravel linux server -

google bigquery - Delta between query execution time and Java query call to finish -

python - Pandas two dataframes multiplication? -