私のCollectionViewと同じサイズのcollectionViewセル、つまり一度に1つのCellが画面に表示され、セル間で最小間隔を10にしたい場合、問題は私がセルをスクロールすると、セルは画面全体に適切にフィットせず、セルの移動はスクロールごとに増加します。 (よりよい理解のためのスクリーンショットをチェックしてください)CollectionView Cellは水平スクロールの後に右に移動します
答えて
コレクションビューでpagingEnabled
と設定したとします。このプロパティはUIScrollView
から継承されます(UICollectionView
はUIScrollView
のサブクラスなので)。
問題は、コレクションビューでは、ページの幅として独自の幅(ポスト内の320ポイント)が使用されることです。あなたのセルはそれぞれコレクションビューと同じ幅ですが、セル間に10ポイントのガターがあります。これは、セル0の左端からセル1の左端までの距離が320 + 10 = 330点であることを意味します。したがって、セル1を表示するためにスクロールすると、コレクションビューはオフセット320(独自の幅)でスクロールを停止しますが、セル1は実際にオフセット330から開始します。
最も簡単な修正はおそらくpagingEnabled
をオフにし、
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 than one more page when decelerating, and don't go beyond the 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
}
ます。また、デバイスの画面サイズに合わせて項目のサイズを設定し、かつ高速に減速度を設定することをお勧めします:
このように、あなたのコレクションビューのデリゲートにscrollViewWillEndDragging(_:withVelocity:targetContentOffset:)
をオーバーライドR esult:
理由は、セル(320)の幅を設定しながら、あなたがminimum separation of 10
を取っていないことです。したがって、この10
はスクロールするたびに蓄積されています。
したがって、幅を設定しているときに320を10から引く必要があるので、幅は310 IMOにする必要があります。
私は私の計算で正確ではないかもしれないが、最小間隔の蓄積が理由ですので、あなたが考慮にそれを取らなければなりません。 –
- 1. 水平スクロールa UICollectionViewを右端または最後のセルまで移動
- 2. CollectionViewの垂直スクロール各セクションの水平スクロールを伴うセクション
- 3. 動的に水平スクロール
- 4. UICollectionView水平スクロール
- 5. Chart.js水平棒グラフのラベルを右に移動
- 6. 右にスクロールバーがあるため、水平メニューバーが左に移動します
- 7. コントロールのコレクションビューcollectionViewからのスクロールCell
- 8. div内の水平方向に自動的に水平にスクロールするには?
- 9. スクロールで水平方向に要素を移動する
- 10. jQuery - 垂直スクロールでオブジェクトを水平に移動
- 11. カスタム水平スクロールバーがトラックの最後に移動しない
- 12. Webページが右に空白だけで水平にスクロールする
- 13. 別のレイアウトに水平移動する
- 14. 自動スクロール水平リンクジャンプ
- 15. テーブル/コレクションビューの水平スクロール
- 16. CollectionViewは最後のセルにスクロールする
- 17. iOS - 水平CollectionView内のUITableView、VerticalScrollViewの水平コレクションビュー
- 18. 垂直方向にスクロールするときにDIVを水平方向に移動
- 19. スクロールで画像を水平に移動してから停止する
- 20. 水平移動と垂直移動を指定します
- 21. GWT水平スクロールの水平パネル
- 22. 水平線を上下に移動
- 23. MouseMoveイベントでパネルを水平に移動
- 24. 水平スクロールが
- 25. JS - 水平スクロール
- 26. Fullpage.js - 水平スクロール
- 27. 水平スクロールGridView
- 28. SurfaceView水平スクロール
- 29. 水平スクロール
- 30. ハイチャート水平スクロール
ソリューションと素晴らしい説明@robmayoff、ありがとうございました。 –