跨数据重新加载维护自定义 UICollectionViewLayout 中视图的第一响应者状态

Maintaining the first responder status of a view in a custom UICollectionViewLayout across data reloads

我正在从头开发 UICollectionViewLayout。我想实现交错网格布局,又名 Pinterest 布局。我知道,那里有很多,但几乎所有这些都只支持静态项目高度,而我希望动态计算项目高度。

我让布局过程正常工作,但现在我偶然发现了一个问题。我想在 header 部分添加一个搜索栏。问题是,每当我调用 collectionView.reloadData() 时,搜索栏都会失去第一响应者状态(同时保持其他状态,例如当前值)。

我尝试了通常的解决方法(比如在 reloadData() 之后立即调用 searchBar.becomeFirstResponder()),但没有用。另一种解决方法是将 header 与搜索栏和项目保留在单独的部分中,只重新加载带有项目的部分,但我的布局目前只支持一个部分,很高兴知道这是否真的能解决在花时间实现对多个部分的支持之前出现问题(否则我不需要)。

是什么导致搜索栏失去第一响应者状态,我该如何防止这种情况发生? 我对自定义 UICollectionViewLayouts 没有太多经验,所以我也很感激任何关于引擎盖下发生的事情的信息(当数据重新加载时和一般情况下)。

我最终实现了对多个部分的支持,将 header 与搜索栏放在一个单独的部分中,并且只重新加载包含项目的部分。似乎此解决方法也适用于自定义布局。