动态大小的 collectionView 单元格导致可见性问题 - iOS

Posted

技术标签:

【中文标题】动态大小的 collectionView 单元格导致可见性问题 - iOS【英文标题】:Dynamic sized collectionView cell causing visibility issue - iOS 【发布时间】:2019-03-26 19:11:08 【问题描述】:

我有一个 3 列和多行的集合视图。在我的sizeForItemAtIndexPath 中,我返回一个动态的CGSize,如下所示:

return CGSizeMake(_sponsoredCollectionView.frame.size.width/3 - 7, (_sponsoredCollectionView.frame.size.width/3 - 7 + nameHeight + cuisineHeight + addressHeight + timingHeight + paddings));

但是对于上述大小,我的最后一个单元格没有显示(我不明白为什么,因为返回的高度与以前的单元格相似,并且有很多空间可以显示,如以前的单元格),请参见下面的屏幕截图:

当我将大小硬编码为以下内容时:

return CGSizeMake(_sponsoredCollectionView.frame.size.width/3 - 7,250);

显示(带有KEKOU标题的单元格,但由于硬编码250高度,显然上下有很多空格,请参见下面的截图:

另外,我正在执行以下操作,以便 CollectionView 在重新加载后根据单元格调整大小

[_sponsoredCollectionView reloadData];

dispatch_async(dispatch_get_main_queue(), ^
  _sponsoredCollectionViewHeightConstraint.constant = _sponsoredCollectionView.collectionViewLayout.collectionViewContentSize.height + 0;
);

我无法理解是什么问题:S 请帮忙!

【问题讨论】:

有人可以帮忙吗?试了太久没解决 【参考方案1】:

最后经过一整夜的反复试验和研究,我通过更改 _sponsoredCollectionViewHeightConstraint.constant 中的 performBatchUpdates 解决了这个问题,如下所示:

[_sponsoredCollectionView reloadData];

dispatch_async(dispatch_get_main_queue(), ^
                        [self.sponsoredCollectionView performBatchUpdates:^
                            _sponsoredCollectionViewHeightConstraint.constant = _sponsoredCollectionView.collectionViewLayout.collectionViewContentSize.height + 5;//_sponsoredCollectionView.contentSize.height + 5;
                         completion:nil];
                    );

【讨论】:

以上是关于动态大小的 collectionView 单元格导致可见性问题 - iOS的主要内容,如果未能解决你的问题,请参考以下文章

在tableview单元格内创建动态collectionView

UICollectionViewCell 宽度的动态变化

具有动态高度的水平 CollectionView 导致 FlowLayout 警告

如何根据其中的内容创建具有动态高度的集合视图?

普通 CollectionView 单元格中的动态 CollectionView 单元格

为啥 CollectionView 单元格内部其他 collectionView 的大小错误?