UICollectionView上的UIRefreshControl仅在集合填充容器高度时才能工作如何处理?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

我试图添加UIRefreshControl到a UICollectionView,但问题是除非集合视图填充其父容器的高度,否则不会显示刷新控件。换句话说,除非集合视图足够长以至于需要滚动,否则无法将其拉下以显示刷新控制视图。只要集合超过其父容器的高度,它就会被拉下并显示刷新视图。

我已经UICollectionView在主视图中设置了一个快速的iOS项目,并带有一个集合视图的出口,以便我可以添加UIRefreshControlviewDidLoad。还有一个带重用标识符的原型单元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;
用户回答回答于

扫码关注云+社区