2017-01-26 7 views
4

UICollectionViewUIViewControllerで、ページングを有効にしています。いくつかの奇妙な理由により、collectionviewの方向がverticalのときにはcollectionView.scrollToItemが動作しますが、方向が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

あなたが方向@SwiftyCruz 'UICollectionFlowLayout' – Cruz

+0

を使用して垂直から水平にスクロール方向を設定することができますが、すでに基本的にチェックし、水平 – kye

+0

に設定されている、collectionViewの境界が、それは水平のために大きくなければならない幅より大きく、あなたのcollectionView contentSizeの幅であり、スクロール – Cruz

答えて

12

スクロール方向が horizontalであるあなたが使用する必要が

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

at: leftat: rightまたはat: centeredHorizontallyat: topverticalの方向です。

+0

それは意味がある、私はそれについて考えていたはずです。ご協力いただきありがとうございます。 – kye

0

アイテムをスクロールする場合、データを再ロードする必要はありません。コードの下の行をコードから削除して試してみてください。この部分については

collectionView.reloadData() 
+0

私はテスト目的のためだけにそこにあったことを知っています – kye

2

これは、項目ごとに入力ページングを使用してフローレイアウトで実装するのに問題がありました。 .centeredHorizo​​ntallyだけので、私は、データがスクロールする前にそこにあるRECTと確認するためにスクロールを使用する私のために動作しないでしょう。

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:

これは、水平コレクションビューに私のために働きました。

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) 
} 

あなたはインデックスで所望のセルが右またはスクロール位置を左側にするかどうかを選択することができます。

UICollectionViewScrollPosition.right or UICollectionViewScrollPosition.left. 
関連する問題