【问题标题】:UICollectionView Scroll Jumpy InitiallyUICollectionView 最初滚动跳跃
【发布时间】:2021-03-06 17:06:34
【问题描述】:

我正在使用 UICollectionView 进行聊天并在加载时使用滚动到底部。一切都很好,除了我第一次手动滚动它反弹了大约 50-100 pt。如果我继续滚动,它会进入安全区域并位于屏幕下方。

是什么导致了初始反弹?似乎它首先从底部安全区域的顶部反弹,如果您继续滚动,它会很好地低于安全区域。

我想要得到的是一个很好的平滑滚动,最初没有奇怪的反弹。

这似乎是由于我在使用invalidateLayout 加载图像高度后动态调整图像高度。

【问题讨论】:

    标签: ios swift uicollectionview


    【解决方案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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-25
      • 1970-01-01
      • 2017-07-01
      • 1970-01-01
      • 2014-03-26
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      相关资源
      最近更新 更多