【问题标题】:UICollectionView does not scroll after it has been initializedUICollectionView 初始化后不滚动
【发布时间】: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 个单元格)

这里缺少哪些要点?

【问题讨论】:

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

标签: ios swift uiscrollview uicollectionview


【解决方案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先生!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多