如何集中关注的UICollectionViewCell?

时间:2015-10-07 12:15:05

标签: tvos apple-tv

我想要实现的非常简单:每次用户聚焦一个集合视图单元格时,我想让焦点单元格水平居中。看起来我现在的做法根本不起作用。

    func collectionView(collectionView: UICollectionView, didUpdateFocusInContext context: UICollectionViewFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) {
        guard collectionView === self.categoryCollectionView else {
            return
        }
        guard let indexPath = context.nextFocusedIndexPath else {
            return
        }

        collectionView.scrollToItemAtIndexPath(indexPath, atScrollPosition: .CenteredHorizontally, animated: true)
    }

奇怪的是,集合视图忽略了任何在任何地方滚动的尝试。出于测试目的,我将索引路径更改为集合视图中最后一项的索引路径,但仅在首次出现集合视图时才有效。

2 个答案:

答案 0 :(得分:8)

诀窍是确保你已经设置了UICollectionView scrollEnabled = false。

override func didUpdateFocusInContext(context: UIFocusUpdateContext, 
  withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) {
    if let focusedView = context.nextFocusedView as? UITableViewCell {
      collectionView.scrollEnabled = false
      let indexPath = collectionView.indexPathForCell(focusedView)!
      collectionView.scrollToItemAtIndexPath(indexPath, atScrollPosition: .CenteredHorizontally, animated: true)
    }
}

答案 1 :(得分:0)

我记得在AirBnB's guide to the Focus Engine的某处读到他们有点覆盖了这一点。他们的代码(on GitHub)用于UIButton类,但希望你可以从中为CollectionView绘制摘要。

希望它可以帮助您找到解决方案!