【问题标题】:iOS UICollectionView with self sizing items bug?iOS UICollectionView 与自定尺寸项目错误?
【发布时间】:2016-11-15 14:49:16
【问题描述】:

我正在尝试使用自定义大小的项目来实现 UICollectionView (flowLayout)。

实现非常简单——我刚刚设置了estimatedItemSize 并设置了UICollectionViewCell 约束来管理它的大小。

在创建collectionView 后第一次重新加载数据时一切正常,但在另一个或其他一些重新加载时,顶部的几个项目的大小与estimatedItemSize 的大小相同。如果向下和向上滚动 - 项目大小再次看起来不错。

我在这个问题上花了 2 天时间来试验不同的单元格约束,尝试在不同的地方设置需要的布局以及 collectionView 周围的其他东西。是bug吗?

【问题讨论】:

    标签: ios objective-c autolayout uicollectionview


    【解决方案1】:

    this post 中,我遇到了一个有趣的问题,我找到了自己的答案。有两个重要的函数可以正确用于调整大小,它们是:

    minimumInteritemSpacingForSectionAtIndex
    insetForSectionAtIndex
    sizeForItemAtIndexPath
    

    我在 Swift 中使用它们的示例

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionView, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat {
        return 0
    }
    
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets {
        return UIEdgeInsetsMake(0, 0, 0, 0)
    }
    
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: IndexPath) -> CGSize {
        let screenRect: CGRect = collectionView.bounds
        let screenWidth: CGFloat = screenRect.size.width
        let cellWidth: CGFloat = screenWidth / 24
        //Replace the divisor with the column count requirement. Make sure to have it in float.
        let size: CGSize = CGSize(width: cellWidth, height: cellWidth)
        return size
    }
    

    最大的秘密是在将视图附加到后沿和底部布局时要小心。如果您只将它们附加到前导和顶部,那么您可以通过框架或约束以编程方式设置宽度和高度。我认为通过约束来实现更直接一些,尽管在我的个人项目中我选择了另一种方式,因为在我看来它使功能更清晰。

    尝试在 cellForItemAt 内尽可能多地完成单元格布局。

    【讨论】:

    • 您建议主要在cellForItemAt 中进行布局非常有帮助。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 2014-11-11
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多