가로 스크롤과 페이징을 사용하는 UICollectionView
이 있습니다. 다음 또는 이전 페이지로 처음 스크롤하거나 스크롤 방향을 왼쪽에서 오른쪽으로 변경하면 cellForItemAtIndexPath
에있는 indexPath.row 값이 1이 아닌 3으로 변경됩니다. 그러면 올바르게 작동합니다. CollectionView
은 문제없이 작동합니다. iOS
9.이 문제는 iOS
에서 발생합니다. 10. 감사합니다.UICollectionView cellForItemAt iOS 10에서 indexPath가 행 인덱스를 건너 뜁니다.
답변
UICollectionView의 새로운 프리 페치 기능에 문제가있었습니다. 프리 페칭을 사용하지 못하게하면 문제가 해결됩니다.
if #available(iOS 10.0, *) {collectionView.isPrefetchingEnabled = false}
가능한 케이스 :
당신이 당신의 collectionView에 페이징을 사용하고, 당신의 선언으로, 1 페이지 3 개 세포를 포함하기 때문에. 따라서 1 페이지 이동하면 왼쪽의 셀에서 인덱스를 가져 오기 때문에 셀의 인덱스는 3만큼 이동합니다.
예. 셀> 페이지 1 : [0..1..2] 페이지 2 : [3..4..5]
페이지에 하나의 셀만 사용합니다. iOS 9에서 완벽하게 작동합니다. 여기에서 캡처 한 iOS 10의 문제 : https://www.youtube.com/watch?v=BTaD_InGt6g&feature=youtu.be. –
비디오로 컬렉션보기가 해당 페이지에 올바른 셀을 표시하고 있음을 표시하지 않습니다. 즉, 6 페이지가 6 번 셀을 보여주고 있다고 판단 할 수 없습니다. 셀이 올바르지 않아 "cellForItemAtIndexPath"가 올바른 값을 반환 할 수 없습니다. 그런데'collectionView.visibleCells'를 사용하여 어떤 셀이 표시되는지 확인하는 것이 좋습니다. 그리고 "cellForItemAtIndexPath"로 그 셀을 생성 할 때 그 셀에'TAG '를 추가 할 수 있습니다. 행 번호를 표시하려면 태그 번호를 사용하십시오. 또는 작성한 왼쪽/오른쪽 단추의 메서드에 논리적 인 오류가있을 수 있습니다. – KTang
"3으로 변경"이라고 말하면 사용자가 의미하는 것이 분명하지 않습니다. 전혀 색인을 요구하지 않는다는 것을 의미합니까? 또는 당신을 놀라게하는 순서로 색인을 요청 받았습니까? –
더 나은 이해를 위해 동영상 https://www.youtube.com/watch?v=BTaD_InGt6g&feature=youtu.be를 추가했습니다. 문제는 iOS 10에서만 발생합니다. –
아마 페이지 크기를 잘못 계산했을 것입니다. 몇 가지 코드가 없으면 어떻게 도와야하는지 명확하지 않습니다. 코드를 추적하고 호출되는 데이터 소스 메쏘드와 어떤 값을 정확하게 볼 수 있어야합니다. 콜렉션 뷰에서 새로운 프리 페치 동작에 놀랐다고 생각합니다 (콜렉션 뷰는 이제 반드시 보이지 않는 셀을 요청합니다). –