UIRefreshControl未与contentInset集居中

时间:2018-06-20 15:54:19

标签: ios objective-c uicollectionview uirefreshcontrol

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

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无效后,我尝试手动设置宽度。

有什么想法吗?我想我将不得不将其放入容器视图中……但不必这样做!

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

>

对我有用的方法很简单。将 UIRefreshControl 添加到 collectionView 的 backgroundView:

collectionView.backgroundView = viewModel.refreshControl

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

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