如何在屏幕底部加载集合视图?

Posted

技术标签:

【中文标题】如何在屏幕底部加载集合视图?【英文标题】:How to load collection view at bottom of the screen? 【发布时间】:2020-07-29 05:45:21 【问题描述】:

我有一个显示消息的集合视图。现在它加载消息然后滚动到底部

let indexPath = IndexPath(item: self.messages.count - 1, section: 0)
self.collectionView?.scrollToItem(at: indexPath, at: .bottom, animated: true)

这可行,但有大量消息和 collectionview 项目,它滚动非常缓慢并且非常不稳定。 我想要发生的是集合视图从底部开始,并且不必滚动浏览所有消息并且看起来就像在消息上所做的那样。这个我也试过了,还是不行

let point = CGPoint(x: 0, y: self.collectionView.frame.size.height)
self.collectionView.setContentOffset(point, animated: false)

【问题讨论】:

【参考方案1】:

如果您不想滚动消息并立即到达底部,请将animated 参数设置为false

let indexPath = IndexPath(item: self.messages.count - 1, section: 0)
self.collectionView?.scrollToItem(at: indexPath, at: .bottom, animated: false)

【讨论】:

【参考方案2】:

您可以在viewDidLoad 底部尝试此代码,它在 ios 13 中运行良好,我不在其他版本中测试:

DispatchQueue.main.async 
    let lastIndexPath = IndexPath(item: self.messages.count - 1, section: 0)
    self.collectionView.scrollToItem(at: lastIndexPath, at: .centeredVertically, animated: false)

如果您将第二个代码放入DispatchQueue.main.async,它应该可以工作,(我认为...)

【讨论】:

以上是关于如何在屏幕底部加载集合视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在集合视图的底部/页脚中添加 uiactivity 指示器?

如何在 UITableView swift 3 中使用动画在底部滚动

如何自动重新加载集合视图?

如何在 UICollectionView 中加载更多数据而不重新加载所有数据

如何将加载覆盖进度条覆盖到android的“底部导航视图”(使用约束布局)

如何在屏幕底部对齐视图,但也在相对布局中的其他视图下方对齐