UIRefreshControl 不以 contentInset 集为中心
Posted
技术标签:
【中文标题】UIRefreshControl 不以 contentInset 集为中心【英文标题】:UIRefreshControl not centred with contentInset set 【发布时间】:2018-06-20 15:54:18 【问题描述】:我在集合视图中添加了一个刷新控件。一切正常,但是当我设置 collectionView.contentInset = UIEdgeInsetsMake(0, 20, 20, 20) 时,刷新控件的宽度保持不变,但移动了 20px,因此不在视图中居中。控件应减少 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 无济于事。
有什么想法吗?我想我需要将它放在容器视图中......但不需要!
【问题讨论】:
容器视图不起作用,因为 UIRefreshControl 断言如果未添加到滚动视图! 【参考方案1】:好的,通过不设置 collectionView.contentInset 解决了这个问题。相反,我设置了 flowLayout
即
flowLayout.sectionInset = UIEdgeInsetsMake(0, 20, 20, 20);
【讨论】:
节省了很多时间。【参考方案2】:接受的答案不符合我的需求,因为我有一个复杂的 collectionView,其中包含多种类型的单元格,并且每个单元格都有特定的部分插入,因此我不想深入研究并使用此解决方案增加复杂性。
对我有用的方法很简单。将UIRefreshControl
添加到collectionView
的backgroundView 中:
collectionView.backgroundView = viewModel.refreshControl
完成刷新后,只需执行以下操作:
DispatchQueue.main.async
self.viewModel.refreshControl?.endRefreshing()
【讨论】:
以上是关于UIRefreshControl 不以 contentInset 集为中心的主要内容,如果未能解决你的问题,请参考以下文章