集合视图单元格动态高度问题
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
顶部对齐
【讨论】:
以上是关于集合视图单元格动态高度问题的主要内容,如果未能解决你的问题,请参考以下文章