2016-06-17 21 views
1

私はiOSとSwiftを初めて使用しています。UIcollectionView scrollToitemAtIndexPathが非表示セルでは機能しません

カスタムLayoutAttributesとイメージの高さを計算する再利用可能なカスタムセルを使用してUICollectionViewを作成することができました。 それはすべて素晴らしいです。うまく動作し、私は手動でスクロールできます。すべて良い。

問題は、プログラムでN番目のindexPathまでスクロールしたいが、scrollToItemAtIndexPathは目に見えるものに対してのみ動作するように思えるということです。

私はiphone 5Sで9枚の画像を表示する2列の画像が必要です。 イメージの総数は31です。

したがって、collectionViewのScrollToItemAtIndexPathを使用すると、9番目のアイテムまで機能します。

しかし、プログラムでさらにスクロールしようとすると、12番目と言えば動作しません。 奇妙なビットは、手動でスクロールし、コードを呼び出すと動作します。 私はちょっとデバッグし、最初の9個のセルだけが高さで計算されているのを見ました。 それは問題でしょうか?もしそうなら、どうすればそれを動作させることができますか?

didLayoutSubviewsなどの使用を提案しましたが、動作しませんでした。

現時点では、didSelectItemAtIndexPath collectionView funcを使用してプログラムでスクロールしています。

編集:私はインデックスパス(例えば12)の数をハードても

override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
    let item = self.collectionView(self.collectionView!, numberOfItemsInSection: 0) - 1 
      let lastItemIndex = NSIndexPath(forItem: item, inSection: 0) 
      self.collectionView?.scrollToItemAtIndexPath(lastItemIndex, atScrollPosition: UICollectionViewScrollPosition.CenteredVertically, animated: true) 
} 

それはまだ動作しません。 詳細情報が必要な場合は、私にお知らせください。

ここに何か不足していますか?

多くのありがとう。

+0

ご質問にコードを追加してください。いつあなたはスクロールしたいですか?与えられたNSIndexPathにスクロールするコードはどのように見えますか? – beeef

+0

あなたが意味することを明確にすることはできますか?「現時点では、プログラムでスクロールするためにdidSelectItemAtIndexPath collectionView funcを使用しています。それはあなたの問題と関係しているかもしれません。また、はい、助けにいくつかのコードを投稿してください –

+0

あなたの簡単な返信のために@beeefありがとう、ここではスクロールのコードです。 – mox8iro

答えて

3

viewDidAppearのscrollToItemAtIndexPathメソッドを呼び出す必要があります。つまり、cellForItemAtIndexPathは既に呼び出されています。

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

    collectionView.scrollToItemAtIndexPath(NSIndexPath(forRow: index, inSection: 0), atScrollPosition: .CenteredVertically, animated: false) 

} 
関連する問題