【问题标题】:UICollectionView scroll bugUICollectionView 滚动错误
【发布时间】:2019-05-07 20:02:40
【问题描述】:

我已经打开了分页的全屏收藏视图:

这是我在代码中的配置方式:

    let layout = UICollectionViewFlowLayout()
    layout.minimumInteritemSpacing = 0.0
    layout.minimumLineSpacing = 0.0
    layout.itemSize = UIScreen.main.bounds.size
    layout.scrollDirection = UICollectionViewScrollDirection.horizontal
    layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0)

    allQuotesCollectionView.collectionViewLayout = layout

在我的故事板中:

我遇到的问题是第一次加载屏幕时滚动时出现滚动动画错误:

这个错误发生后,滚动变得平滑。 我怎样才能解决这个问题?我也使用过Github Framework,但没有帮助。我需要任何可能的解决方案来解决这个问题。

将不胜感激任何帮助,非常感谢。

【问题讨论】:

  • 用“DispatchQueue.main.async”在“func viewDidAppear(_ animated: Bool)”中编写代码,我希望它能工作。
  • @AtulParmar 我在viewDidLayoutSubviews 方法中有我的代码,但我会试试你的建议
  • @AtulParmar 在 vi​​ewDidAppear 中不需要 DispatchQueue.main.async { }
  • @VitaliyPoltavets,我认为加载滚动视图可能会出现问题,然后视图出现,这就是为什么我建议在主线程中编写代码。
  • @AtulParmar 遵循您的建议确实有所帮助,但出现了新错误 - 您可以看到如何设置集合视图布局。您可以看到集合视图如何自行拉伸以适应屏幕尺寸

标签: ios swift scroll uicollectionview


【解决方案1】:

在与这个问题斗争了三四天后,终于找到了原因:

我的错误在这里:

override func viewDidLayoutSubviews() {
    let midIndexPath = IndexPath(row: infiniteSize / 2, section: 0)
    allQuotesCollectionView.scrollToItem(at: midIndexPath, at: .centeredHorizontally, animated: false)
}

在我将此代码移入 viewDidAppear 方法后 - 一切都开始工作并且错误消失了。

所以,我的最终代码现在看起来像这样:

override func viewDidAppear(_ animated: Bool) {
    let layout = UICollectionViewFlowLayout()
    layout.minimumInteritemSpacing = 0.0
    layout.minimumLineSpacing = 0.0
    layout.itemSize = UIScreen.main.bounds.size
    layout.scrollDirection = UICollectionViewScrollDirection.horizontal
    layout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0)

    allQuotesCollectionView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0)
    allQuotesCollectionView.collectionViewLayout = layout
    allQuotesCollectionView.isPagingEnabled = true

    let midIndexPath = IndexPath(row: infiniteSize / 2, section: 0)
    allQuotesCollectionView.scrollToItem(at: midIndexPath, at: .centeredHorizontally, animated: false)

    DispatchQueue.main.asyncAfter(deadline: .now() + 0.25, execute: {
        UIView.transition(with: self.view, duration: 1, options: .transitionCrossDissolve, animations: {
            self.allQuotesCollectionView.isHidden = false
        })
    })
}

我猜你需要在屏幕加载页面后设置集合视图,主要是开始索引。

希望这对将来的人有所帮助!

【讨论】:

    猜你喜欢
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    相关资源
    最近更新 更多