UICollectionView 初始化后不滚动

Posted

技术标签:

【中文标题】UICollectionView 初始化后不滚动【英文标题】:UICollectionView does not scroll after it has been initialized 【发布时间】:2015-11-24 16:16:06 【问题描述】:

我有一个 UICollectionViewController 的子类,它嵌套在 UINavigationController 中。该集合包含几个单元格(当前为 3 个),每个单元格与全屏一样大。

显示整个内容时,集合视图最初会滚动到特定单元格(每个单元格都可以完美运行):

override func viewDidLayoutSubviews() 
    super.viewDidLayoutSubviews()
    if let path = currentlyPresentedPhotoCellIndexPath  // this is set in the beginning
        collectionView?.scrollToItemAtIndexPath(path, atScrollPosition: UICollectionViewScrollPosition.CenteredHorizontally, animated: false)
    

但是,此后,集合视图拒绝水平滚动,就好像禁用了用户交互一样。我不确定发生了什么,但这是我目前检查过的:

为集合视图启用用户交互 下一个单元格(右或左,取决于滚动方向)被正确请求,我通过检查collectionView:cellForItemAtIndexPath: 发现了这一点 请求的 imagePath 是正确的 如果我在加载所有内容后尝试以编程方式触发滚动,scrollToItemAtIndexPath... 也不起作用(没有任何反应) scrollRectToVisible... 两者都没有 在程序化滚动尝试发生之前设置 collectionView?.contentInset = UIEdgeInsetsZero 不会改变任何内容 集合视图的内容大小为 3072x768(= 3 个屏幕,即 3 个单元格)

这里缺少哪些要点?

【问题讨论】:

你试过这个吗? ***.com/questions/33737839/… 好吧,滚动发生在我发布的代码成功执行之后。因此,一切都已经布置好了。此外,自动滚动(基于用户手势,即不是通过编程方式触发)应该在任何情况下发生。 @Mr.T 我修改了我的评论:不是我的问题的完全解决方案,但绝对是指向正确方向的指针! 【参考方案1】:

虽然这篇文章没有准确解决我的问题的根源,但它迫使我思考我发布的代码。如果您查看它,您会发现它基本上说:每当需要布局视图时,滚动到位置 currentlyPresentedPhotoCellIndexPath 处的单元格。但是,如果没有任何上下文,您将无法看到这一点,该变量仅在整个控制器初始化时设置一次。因此,当您尝试滚动时,布局会发生变化,然后控制器会跳回初始单元格,看起来好像什么都没有发生。

要改变这一点,你只需要强制执行一个滚动,例如通过这样做:

override func viewDidLayoutSubviews() 
    super.viewDidLayoutSubviews()
    if let path = currentlyPresentedPhotoCellIndexPath  // only once possible
        collectionView?.scrollToItemAtIndexPath(path, atScrollPosition: UICollectionViewScrollPosition.CenteredHorizontally, animated: false)
        currentlyPresentedPhotoCellIndexPath = nil // because of this line
        // "initiallyPresentedPhotoCellIndexPath" would probably a better name
    
 

非常感谢T先生!

【讨论】:

以上是关于UICollectionView 初始化后不滚动的主要内容,如果未能解决你的问题,请参考以下文章

iOS UICollectionView无限轮播

iOS UICollectionView无限轮播

为啥 UICollectionView 不滚动其中的 UIButtons?

UICollectionView 在滚动后显示错误的单元格 - 出队问题?

RxSwift - UICollectionView 更新后不更新

UICollectionView 最初滚动跳跃