UIRefreshControl 未以 contentInset 集为中心

UIRefreshControl not centred with contentInset set

我在集合视图中添加了一个刷新控件。一切正常,但是当我设置 collectionView.contentInset = UIEdgeInsetsMake(0, 20, 20, 20) 时,刷新控件的宽度保持不变但移动了 20 像素,因此不在视图中居中。控件应该减少 40px 才能正确。

self.collectionView = [[UICollectionView alloc] initWithFrame:rect collectionViewLayout:flowLayout];
self.collectionView.contentInset = UIEdgeInsetsMake(0, 20, 20, 20)
UIRefreshControl* pullDownRefresh = [[UIRefreshControl alloc] init];
[pullDownRefresh addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];
[self.collectionView addSubview:pullDownRefresh];

我已经尝试在添加视图后手动设置宽度(也在 viewWillLayoutSubviews 中),并且尝试使用 autoresizingMask 无济于事。

有什么想法吗?我想我需要求助于将它放在容器视图中......但不需要!

好的,通过不设置 collectionView.contentInset 解决了问题。相反,我设置了 flowLayout

flowLayout.sectionInset = UIEdgeInsetsMake(0, 20, 20, 20);

接受的答案不符合我的需要,因为我有一个复杂的 collectionView,其中包含多种类型的单元格,并且每个单元格都有特定的部分插图,所以我不想深入研究并增加此解决方案的复杂性。

对我有用的东西很简单。改为将 UIRefreshControl 添加到 collectionView 的 backgroundView:

collectionView.backgroundView = viewModel.refreshControl

完成刷新后,只需执行以下操作:

DispatchQueue.main.async {
    self.viewModel.refreshControl?.endRefreshing()
}