当调用 `performUpdates(:)` 时,由 IGListKit 提供支持的 UICollectionView 停止滚动
Posted
技术标签:
【中文标题】当调用 `performUpdates(:)` 时,由 IGListKit 提供支持的 UICollectionView 停止滚动【英文标题】:IGListKit-powered UICollectionView stops scrolling when `performUpdates(:)` gets called 【发布时间】:2019-11-08 18:14:03 【问题描述】:我目前遇到一个问题,当用户滚动 IGListKit
驱动的 UICollectionView
时,当调用 listAdapter.performUpdates(:)
时滚动突然停止。
在不涉及太多细节的情况下,ListAdapterDataSource
正在检查集合视图对象的Interstellar-powered observable 属性的值。托管ListAdapter
的视图控制器也订阅此属性,并在值更改时发出performUpdates(:)
。
我使用scrollViewWillEndDragging(:)
与IGListKit Examples 类似,在用户接近列表末尾时触发页面获取网络操作。该操作完成后使用最新项目更新可观察属性。
我的问题是,在网络操作完成并更新可观察属性(从而触发performUpdates(:)
)的同一时刻,滚动停止。即使旧对象数据集与新对象数据集完全相同(通过手动差异确认),当没有更多结果/页面要获取时,也会发生这种情况,
关于如何调试的任何建议?也许某个方法上的某个符号断点可以指示导致UICollectionView
的滚动停止的原因?
【问题讨论】:
你可以试试 UIView.performWithoutAnimation performUpdates(:) 。 你在哪个线程调用 performUpdates? @swift2geek 这是主线程。IGListKit
甚至对此有断言。
你试过 UIView.performWithoutAnimation performUpdates(:) 吗?
我遇到了同样的问题,事实证明这是因为我有一个刷新控件,我正在调用self.refreshControl.endRefreshing()
。马上。
【参考方案1】:
不确定它对你来说仍然是真实的@tannos ?,但如果有任何事情会面临与你和我一样的问题,我会把它留在这里。
正如@danqing 在 cmets 中提到的,这是因为UIRefreshControl
。
所以,像
if refreshControl.isRefreshing
refreshControl.endRefreshing()
可以节省您的一天:)
【讨论】:
以上是关于当调用 `performUpdates(:)` 时,由 IGListKit 提供支持的 UICollectionView 停止滚动的主要内容,如果未能解决你的问题,请参考以下文章
tryToPerform:with: 当 keyDown: 被调用时没有被调用