UICollectionView上的UIRefreshControl只在集合填充容器的高度时起作用

我试图添加一个UIRefreshControlUICollectionView ,但问题是刷新控件不会出现,除非集合视图填满其父容器的高度。 换句话说,除非收集视图足够长以至于需要滚动,否则不能被拉下以显示刷新控制视图。 只要收集超过其父容器的高度,它将被拉下并显示刷新视图。

我已经build立了一个快速的iOS项目,在主视图中只有一个UICollectionView ,带有一个集合视图的出口,这样我就可以在viewDidLoad添加UIRefreshControl 。 还有一个重用标识符cCell的原型单元格

这是控制器中的所有代码,它很好地说明了这个问题。 在这段代码中,我将单元格的高度设置为100,这不足以填充显示,因此无法拉取视图,刷新控件也不会显示。 将其设置为更高的值以填充显示,然后运行。 有任何想法吗?

 @interface ViewController () <UICollectionViewDelegateFlowLayout, UICollectionViewDataSource> @property (strong, nonatomic) IBOutlet UICollectionView *collectionView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init]; [self.collectionView addSubview:refreshControl]; } -(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { return 1; } -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return 1; } -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { return [collectionView dequeueReusableCellWithReuseIdentifier:@"cCell" forIndexPath:indexPath]; } -(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { return CGSizeMake(self.view.frame.size.width, 100); } 

尝试这个:

self.collectionView.alwaysBounceVertical = YES;

完整的UIRefreshControl代码

 UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init]; refreshControl.tintColor = [UIColor grayColor]; [refreshControl addTarget:self action:@selector(refershControlAction) forControlEvents:UIControlEventValueChanged]; [self.collectionView addSubview:refreshControl]; self.collectionView.alwaysBounceVertical = YES; 

属性/滚动查看/在Storyboard / Xib中垂直popup

160wpb4.jpg

拉里的回答很快:

  let refreshControl = UIRefreshControl() refreshControl.tintColor = UIColor.blueColor() refreshControl.addTarget(self, action: "refresh", forControlEvents: .ValueChanged) collectionView.addSubview(refreshControl) collectionView.alwaysBounceVertical = true 

Swift 3:

  let refreshControl = UIRefreshControl() refreshControl.tintColor = .blue refreshControl.addTarget(self, action: #selector(refresh), for: .valueChanged) collectionView.addSubview(refreshControl) collectionView.alwaysBounceVertical = true 

如果你的collectionview有一个足够大的内容大小可以垂直滚动,那就没问题,但是你的情况并不是这样。

你必须启用属性AlwaysBounceVertical ,所以你可以设置self.collectionView.alwaysBounceVertical = YES;

我也面临同样的问题,我不能够使用UIRefreshControl直到UICollectionView的内容大小足够大,可以垂直滚动,

设置UICollectionViewbounces属性解决了这个问题

 [self.collectionView setBounces:YES]; [self.collectionView setAlwaysBounceVertical:YES];