滚动到一个集合视图到一个物种索引

Posted

技术标签:

【中文标题】滚动到一个集合视图到一个物种索引【英文标题】:Scrolling to a collectionView to a specie Index 【发布时间】:2016-10-04 11:25:01 【问题描述】:

我有一个带有多个单元格的collectionView,当我加载它时,我想选择一个特定的单元格,将其显示为选中并将集合视图滚动到该选定单元格的位置,而无需自己进行滚动。

我可以将单元格显示为选中状态,但提供的功能似乎无法滚动。

这是我的尝试。

class RepsCellView: UICollectionViewCell, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout 

    lazy var repsValuesCollectionView: UICollectionView = 
        let layout = UICollectionViewFlowLayout()
        layout.scrollDirection = .horizontal
        let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
        collectionView.backgroundColor = UIColor.black
        collectionView.showsHorizontalScrollIndicator = false
        collectionView.translatesAutoresizingMaskIntoConstraints = false

        return collectionView
    ()

    override init(frame: CGRect) 
        super.init(frame: frame)
        setupViews()
    



    required init?(coder aDecoder: NSCoder) 
        fatalError("init(coder:) has not been implemented")
    

    func setupViews() 

        addSubview(repsValuesCollectionView)

        //...
        //  Cell
        let selectedIndex = IndexPath(item: 19, section: 0)
        repsValuesCollectionView.selectItem(at: selectedIndex, animated: true, scrollPosition: [.centeredHorizontally, .centeredVertically])

    

    //  CollectionView DataSource Functions
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
        return 100
    

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
        return cell
    

提前致谢。

【问题讨论】:

【参考方案1】:

您使用什么 ViewController 事件方法来运行您的代码?

无论如何我都可以滚动它,将您的代码放在 ViewController 事件方法 viewDidAppear 方法中。

class CollectionViewController: UICollectionViewController 
  override func viewDidAppear(_ animated: Bool) 
    super.viewDidAppear(animated)

    let cellToSelect = IndexPath(item: 99, section: 0)

    self.collectionView?.scrollToItem(at: cellToSelect, at: [.centeredHorizontally, .centeredVertically], animated: true)
  

  override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
    return 1
  

  override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! RepsCellView
    cell.setupViews() // added this line
    return cell
  

【讨论】:

我更新了我的代码问题。我从包含 CollectionView 的 CollectionViewCell 调用该方法。 我已经更新了我的答案,在你的父根 collectionView 的代码中,在方法 cellForItemAt 中调用 cell.setupViews(),就像我在我的代码中所做的那样。

以上是关于滚动到一个集合视图到一个物种索引的主要内容,如果未能解决你的问题,请参考以下文章

重新加载并滚动到特定的集合视图单元格

将滚动视图添加到集合视图层次结构

集合视图单元格快速滚动到中心时出现问题

当作为子视图添加到集合视图单元格时,滚动视图中的内容不可见

如何通过颤动列表视图中的索引号滚动到索引?

无论滚动速度如何,如何在每次滑动时将集合视图项捕捉到一个