如何仅重新加载 UICollectionView 的可见部分?

Posted

技术标签:

【中文标题】如何仅重新加载 UICollectionView 的可见部分?【英文标题】:How to reload only the visible sections of a UICollectionView? 【发布时间】:2016-10-27 11:29:56 【问题描述】:

我正在尝试根据设备的方向更改部分中的项目数。

我通过在 viewWillTransitionToSize 中重新加载整个集合视图并更改 UICollectionView 中的部分数量中的“部分中允许的最大项目”的数量来实现它。

这不是最好的方式,因为我可以看到我们可以加载特定的部分。 如果您能提出更好的解决方案,请分享。

【问题讨论】:

你得到了collectionView的可见项的indexPaths。你试过了吗? 实际上只有可见的项目才会重新加载 我试过这个@Adeel -(void)reloadVisibleSections NSMutableIndexSet *visibleSections = [NSMutableIndexSet indexSet]; NSArray *arr = [[self.collectionView indexPathsForVisibleItems] valueForKey:@"section"]; for(NSNumber *index in arr) [visibleSections addIndex:[index unsignedIntegerValue]]; [self.collectionView reloadSections:visibleSections];当我们旋转设备时会崩溃,可能是因为当我从横向移动到纵向时可见部分的数量增加了。 @SanjayPathak 请使用代码和崩溃日志更新您的问题。 【参考方案1】:

您可以使用以下代码重新加载特定部分:

let table = UITableView()
let index = IndexSet.init(integer: 0) //The section to reload
table.reloadSections(index, with: UITableViewRowAnimation.automatic)

如果您想根据可见部分执行此操作,则需要像这样获取可见单元格: table.visibleCells

并创建要从这些可见单元重新加载的部分索引

let table = UITableView()
var indexes = IndexSet()
let visibleCells = table.visibleCells
for cell in visibleCells 
    indexes.insert((table.indexPath(for: cell)?.section)!)

table.reloadSections(indexes, with: UITableViewRowAnimation.automatic) 

【讨论】:

【参考方案2】:
    NSSet *visibleSections = [NSSet setWithArray:[[self.tableView indexPathsForVisibleRows] valueForKey:@"section"]];

//重新加载部分

[self.myCollectionView reloadSections:visibleSections];

【讨论】:

上面的代码对tableView很好。对于 collectionView -(void)reloadVisibleSections NSMutableIndexSet *visibleSections = [NSMutableIndexSet indexSet]; NSArray *arr = [[self.collectionView indexPathsForVisibleItems] valueForKey:@"section"]; for(NSNumber *index in arr) [visibleSections addIndex:[index unsignedIntegerValue]]; [self.collectionView reloadSections:visibleSections]; 当我们旋转设备时会崩溃。

以上是关于如何仅重新加载 UICollectionView 的可见部分?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 在 UiCollectionView 中仅重新加载一个单元格

UICollectionView如何从委托中重新加载数据

如何在不重新加载标题的情况下重新加载 UICollectionView 中的单元格?

如何在 UICollectionView 中强制重新加载自定义单元格?

一旦满足某些条件,如何立即重新加载 UICollectionView 单元格

在 UICollectionView 中使用 reloadData 时如何从重新加载中排除标头