한 번에 하나의 셀이 한 번에 하나의 셀로 표시되고 셀 사이에 최소 간격을 10으로 지정하려는 경우 CollectionView 셀의 CollectionView 셀 크기가 같습니다. 셀을 스크롤하면 셀이 전체 화면을 제대로 맞추지 못하고 스크롤이 끝날 때마다 셀 이동이 증가합니다.CollectionView 셀이 가로 스크롤 한 후 오른쪽으로 이동합니다.
답변
컬렉션보기에 pagingEnabled
을 설정했다고 가정합니다. 이 속성은 UIScrollView
에서 상속됩니다 (UICollectionView
은 UIScrollView
의 하위 클래스이므로).
문제는 컬렉션보기가 자체 너비 (게시물에서 320 포인트)를 페이지 너비로 사용한다는 것입니다. 각 셀은 콜렉션 뷰와 같은 너비이지만 셀 사이에 10 포인트의 "거터"가 있습니다. 즉 셀 0의 왼쪽 가장자리에서 셀 1의 왼쪽 가장자리까지의 거리는 320 + 10 = 330 포인트입니다. 따라서 셀 1을 표시하기 위해 스크롤하면 콜렉션 뷰는 오프셋 320 (자체 너비)에서 스크롤을 중지하지만 셀 1은 실제로 오프셋 330에서 시작합니다.
가장 쉬운 방법은 pagingEnabled
을 끄고 다음과 같이 직접 페이징을 구현하는 것입니다. 이 같은 컬렉션 뷰 위임에 scrollViewWillEndDragging(_:withVelocity:targetContentOffset:)
를 오버라이드 (override) :
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
}
당신은 또한 빨리 장치 화면 크기에 맞게 항목의 크기를 설정하고 감속 속도를 설정할 수 있습니다 :
아르 자형 esult는 :
이유는 셀 (320)의 폭을 설정하는 동안 당신이 minimum separation of 10
을 촬영하지 않은 것입니다 (더 나은 이해를 위해 스크린 샷을 확인). 따라서이 10
은 누적 될 때마다 누적됩니다.
너비를 설정하는 동안 320에서 10을 빼야하므로 너비는 310 IMO가되어야합니다.
내 계산을 정확하지 않을 수 있습니다,하지만 당신은 고려 사항으로 그을해야하므로 최소 간격 축적는 이유입니다. –
- 1. CollectionView 종류 가로 스크롤 + 가로보기
- 2. scrollToItem 가로 스크롤 collectionView 크래시
- 3. CSS 디스플레이 테이블 셀이 오른쪽으로 이동합니다.
- 4. 스크롤 한 후 iOS UITableView 셀이 잘못로드됩니까?
- 5. 콜렉션 뷰 스크롤 후 셀이 알파 바뀝니다.
- 6. UICollectionView에서 2 - 3 번 스크롤 한 후 셀이 사라집니다.
- 7. 가로로 한 번에 하나의 항목 스크롤 collectionView
- 8. 확대/축소 후 jqPlot 그래프가 오른쪽으로 이동합니다.
- 9. CollectionView 스크롤 후 셀 크기 변경 - AutoLayout
- 10. 셀이 선택되면 TableVIew의 UIImage가 이동합니다.
- 11. 가로 스크롤 플래시 게임/큰 가로 장면
- 12. UIScrollView 선택한 셀이 현재보기에서 회전하여 가로 방향으로 이동합니다.
- 13. Collectionview 커버 플로우 속도
- 14. 각 섹션의 가로 스크롤이있는 CollectionView 섹션의 세로 스크롤
- 15. UIWebView가 오른쪽으로 이동합니다. 4.6.3
- 16. 가로 스크롤 몇 초 후 자동 스크롤
- 17. collectionView 셀이 reloadData() 후에 무작위로 강조 표시됩니다.
- 18. 가로 스크롤 후 jQuery 스냅
- 19. 데이터 새로 고침 후 스크롤 막대가 이동합니다.
- 20. jScrollPane div가 Firefox에서 오른쪽으로 이동합니다
- 21. 스크롤 후 테이블 뷰 셀이 혼합됩니다 (신속한)
- 22. 스크롤 후 셀이 gradientLayer를 잃고 있습니다.
- 23. Dispatcher.CurrentDispatcher.Thread.ManagedThreadId를 체크 한 후 CollectionView NotSupportedException
- 24. Android 가로 페이지 스크롤
- 25. 오른쪽으로 이동 저장 값을 이동합니다.
- 26. 네비게이션 옆에있는 텍스트가 오른쪽으로 이동합니다.
- 27. 듣기 가로 스크롤
- 28. 가로 끌기 스크롤 사용 안함
- 29. 정적 가로 스크롤 만들기
- 30. CGrigCtrl 가로 스크롤
솔루션 및 훌륭한 설명에 감사드립니다. @robmayoff, 원활하게 작동합니다. –