2017-01-26 1 views
4

페이징이 활성화 된 UIViewController 내에 UICollectionView이 있습니다. 이상한 이유로 collectionView.scrollToItemcollectionview의 방향이 vertical 일 때 방향이 horizontal 일 때 작동하지 않습니다. 여기에 내가 잘못하고있는 일이 있습니까? 아니면 이런 일이 발생해야합니까?UICollectionView가 가로 방향으로 작동하지 않는 항목으로 스크롤

//Test scrollToItem 
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
    let i = IndexPath(item: 3, section: 0) 
    collectionView.reloadData() 
     collectionView.scrollToItem(at: i, at: .top, animated: true) 
     print("Selected") 
    } 
+0

UICollectionViewScrollPosition.right or UICollectionViewScrollPosition.left. 
입니다 스크롤 – Cruz

+0

를 사용하여 수직에서 수평으로 스크롤 방향을 설정할 수 있습니다 – kye

+0

로 설정되어 @SwiftyCruz'UICollectionFlowLayout' – Cruz

답변

12

:

스크롤 방향이 horizontal 당신이 사용할 필요가

collectionView.scrollToItem(at: i, at: .top, animated: true)

at: left, at: right 또는 at: centeredHorizontally. at: topvertical 방향입니다.

+0

그건 의미가 있습니다. 나는 그것에 대해 생각해 봤어야합니다. 당신의 도움을 주셔서 감사합니다. – kye

0

항목을 스크롤 할 때 데이터를 다시로드 할 필요가 없습니다. 코드에서 아래 줄을 제거하고 시도하십시오. 이 부분에 대한

collectionView.reloadData() 
+0

테스트 목적으로 만 사용되었다는 것을 알고 있습니다. – kye

2

항목 당 입력 된 페이징을 사용하여 플로우 레이아웃에서 구현하는 데 문제가있었습니다.

if self.collectionView?.dataSource?.collectionView(self.collectionView!, cellForItemAt: IndexPath(row: 0, section: 0)) != nil { 
     let rect = self.collectionView.layoutAttributesForItem(at: IndexPath(item: data[index], section: 0))?.frame 
     self.collectionView.scrollRectToVisible(rect!, animated: false) 
    } 
+0

하지만'else'입니까? –

+0

이것은 다른 사람들이 아무것도하지 않은 곳에서 저에게 효과적입니다. - 제 경우에는 원하는 셀이 존재한다는 것을 이미 알고 있으므로 if 체크가 필요하지 않습니다. – mwu

0

스위프트 3 :이 수평 모음보기에 나를 위해 일한

날이 그래서 난 사각형 및 스크롤하기 전에 데이터가 확인하려면 스크롤을 사용하기 위해 .centeredHorizontally은 작동하지 않을 것입니다.

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 

//Show 14th row as first row 
self.activityCollectionView?.scrollToItem(at: IndexPath(row: 14, section: 0), at: UICollectionViewScrollPosition.right, animated: true) 
} 

색인에서 원하는 셀을 오른쪽 또는 스크롤 위치에 둘지 여부를 선택할 수 있습니다.

, 그것은 수평 대형해야 선폭 collectionView 경계보다는 당신의 collectionView contentSize의 폭이 더 큰 당신이 방향이 벌써 기본적으로 확인 수평