UICollectionView 最初滚动跳跃
Posted
技术标签:
【中文标题】UICollectionView 最初滚动跳跃【英文标题】:UICollectionView Scroll Jumpy Initially 【发布时间】:2021-03-06 17:06:34 【问题描述】:我正在使用 UICollectionView 进行聊天并在加载时使用滚动到底部。一切都很好,除了我第一次手动滚动它反弹了大约 50-100 pt。如果我继续滚动,它会进入安全区域并位于屏幕下方。
是什么导致了初始反弹?似乎它首先从底部安全区域的顶部反弹,如果您继续滚动,它会很好地低于安全区域。
我想要得到的是一个很好的平滑滚动,最初没有奇怪的反弹。
这似乎是由于我在使用invalidateLayout
加载图像高度后动态调整图像高度。
【问题讨论】:
【参考方案1】:我能够通过以下运气解决这个问题
AutoSizing cells: cell width equal to the CollectionView
// UICollectionViewController
if let layout = collectionView?.collectionViewLayout as? UICollectionViewFlowLayout
layout.estimatedItemSize = CGSize(width: view.frame.width, height: 100)
// UICollectionViewCell
override func preferredLayoutAttributesFitting(_ layoutAttributes: UICollectionViewLayoutAttributes) -> UICollectionViewLayoutAttributes
let autoLayoutAttributes = super.preferredLayoutAttributesFitting(layoutAttributes)
// Specify you want _full width_
let targetSize = CGSize(width: layoutAttributes.frame.width, height: 200)
// Calculate the size (height) using Auto Layout
let autoLayoutSize = contentView.systemLayoutSizeFitting(targetSize, withHorizontalFittingPriority: UILayoutPriority.required, verticalFittingPriority: UILayoutPriority.defaultLow)
let autoLayoutFrame = CGRect(origin: autoLayoutAttributes.frame.origin, size: autoLayoutSize)
// Assign the new size to the layout attributes
autoLayoutAttributes.frame = autoLayoutFrame
return autoLayoutAttributes
【讨论】:
以上是关于UICollectionView 最初滚动跳跃的主要内容,如果未能解决你的问题,请参考以下文章
在 UICollectionView 滚动了一定距离后调用函数 Objective-C
快速滚动后在 UICollectionView 中保留按钮内容
iOS 7 中 UICollectionView 中不需要的垂直滚动