UICollectionView上的UIRefreshControl只在集合填充容器的高度时起作用
我试图添加一个UIRefreshControl
到UICollectionView
,但问题是刷新控件不会出现,除非集合视图填满其父容器的高度。 换句话说,除非收集视图足够长以至于需要滚动,否则不能被拉下以显示刷新控制视图。 只要收集超过其父容器的高度,它将被拉下并显示刷新视图。
我已经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
拉里的回答很快:
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
的内容大小足够大,可以垂直滚动,
设置UICollectionView
的bounces
属性解决了这个问题
[self.collectionView setBounces:YES]; [self.collectionView setAlwaysBounceVertical:YES];