如何在swift中滚动到集合视图中的特定元素索引

时间:2016-11-24 12:41:40

标签: ios iphone arrays swift uicollectionview

我们有一个集合视图。我制作了一个日历,横向显示日期和我水平滚动日期。现在在屏幕上我只看到3-4个日期。现在我想在我显示的日历屏幕时自动滚动到特定的选定日期。所以我想要滚动到的日期还不可见。

为此,我获得了特定单元格的索引路径。现在我正在尝试将其滚动到特定的索引路径。

  func scrollCollectionView(indexpath:IndexPath)
  {
   // collectionView.scrollToItem(at: indexpath, at: .left, animated: true)
    //collectionView.selectItem(at: indexpath, animated: true, scrollPosition: .left)
    collectionView.scrollToItem(at: indexpath, at: .centeredHorizontally, animated: true)
    _ = collectionView.dequeueReusableCell(withReuseIdentifier: "DayCell", for: indexpath) as? DayCell

  }

请告诉我该如何实施?

7 个答案:

答案 0 :(得分:20)

在控制器的viewDidLoad中,您可以编写代码以滚动到集合视图的特定索引路径。

self.collectionView.scrollToItem(at:IndexPath(item: indexNumber, section: sectionNumber), at: .right, animated: false)

答案 1 :(得分:6)

您可以使用此

self.collectionView.scrollToItem(at:IndexPath(item: index, section: 0), at: .right, animated: false)

答案 2 :(得分:3)

我使用了你的答案@PGDev,但我把它放在viewWillAppear中,这对我很有用。

self.collectionView?.scrollToItem(at:IndexPath(item: yourIndex, section: yourSection), at: .left, animated: false)

答案 3 :(得分:2)

在SWift 4中,这对我有用:

override func viewDidLayoutSubviews() {

    collectionView.scrollToItem(at:IndexPath(item: 5, section: 0), at: .right, animated: false)
}

将其放置在其他任何地方只会产生奇怪的视觉效果。

答案 4 :(得分:0)

在控制器的viewDidLoad中,您可以编写代码

     self.myCollectionView.performBatchUpdates(nil) { (isLoded) in

     if isLoded{
                 self.myCollectionView.scrollToItem(at: self.passedContentOffset, at: [.centeredVertically,.centeredHorizontally], animated: false)
               }
      } 

答案 5 :(得分:0)

我都试过了,但对我来说,它只适用于多加一行

       self.collectionView.scrollToItem(at:IndexPath(item: index, section: 0), at: .right, animated: false)
     
       collectionView.layoutSubviews()

你可以在任何地方调用它。

答案 6 :(得分:0)

测试了这个

func scrollToIndex(index:Int) {
     let rect = self.collectionView.layoutAttributesForItem(at:IndexPath(row: index, section: 0))?.frame
     self.collectionView.scrollRectToVisible(rect!, animated: true)
 }