集合视图单元格动态高度问题

Posted

技术标签:

【中文标题】集合视图单元格动态高度问题【英文标题】:collection view cell dynamic height issue 【发布时间】:2018-05-05 05:43:45 【问题描述】:

我想实现支持单元格动态高度的collectionView 依赖于autoLayout。我有包含图像的产品单元格,在它的底部 stackview 包含其价格和折扣价以及产品报价将完成的 timerLabel。有时产品没有报价,所以我需要从 stackView 隐藏计时器,然后单元格高度会改变。 我用了这个代码

override func viewDidLoad() 
    super.viewDidLoad()
homeCollection.delegate = self
homeCollection.dataSource = self
homeCollection.register(UINib(nibName: "ProductCell", bundle: Bundle.main), forCellWithReuseIdentifier: "cell")
(homeCollection.collectionViewLayout as! UICollectionViewFlowLayout).estimatedItemSize = UICollectionViewFlowLayoutAutomaticSize


然后在 cellForItemAtIndex 中进行测试,我使用了这段代码

 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! ProductCell
    if indexPath.row  == 0
      
        cell.productTimerLabel.isHidden = true

      
return cell

输出是这样的 我的问题是为什么第一个单元格的 topAligment 比第二个单元格的 topAligment 更向下,我希望它们都具有相同的对齐方式

【问题讨论】:

尝试将“cell.productTimerLabel.isHidden = true”替换为“cell.productTimerLabel.alpha = 0” 兄弟我想隐藏它来改变单元格高度,我的问题就是为什么它不像第二个单元格那样从collectionview的顶部开始 第一行有两个高度不同的单元格,所以该行的高度是最高单元格的高度。每个单元格都以该可用高度为中心。 有什么办法让它不居中并从顶部开始??或其他方式来实现我想要的 您需要使用自定义UICollectionViewFlowLayout,或者对每个“行”使用检测最大高度,并在底部使用“不可见单元格部分”进行顶部对齐。它创造了你想要的错觉。 【参考方案1】:

为此,您需要一个自定义的 UICollectionViewLayout,因为 UICollectionViewFlowLayout 始终居中,而不是您想要的顶部对齐。

我建议您使用我从Github 使用的Aligned collection view flow layout。它有一个属性可以让你与verticalAlignment = .top 顶部对齐

【讨论】:

以上是关于集合视图单元格动态高度问题的主要内容,如果未能解决你的问题,请参考以下文章

设置表格视图单元格的动态高度

使用自动布局自定义集合视图单元格的动态高度

在不同设备上动态设置集合视图单元格大小

iOS中的自定大小集合视图单元格

动态 UICollectionView 单元格高度

里面有 TableView 的动态集合视图单元格?