refreshcontrol ios uicollectionview uirefreshcontrol

ios - UIRefreshControl en UICollectionView solo funciona si la colección llena la altura del contenedor



swiperefreshlayout swift (5)

Estoy intentando agregar un UIRefreshControl a UICollectionView , pero el problema es que el control de actualización no aparece a menos que la vista de colección llene la altura de su contenedor principal. En otras palabras, a menos que la vista de colección sea lo suficientemente larga como para requerir desplazamiento, no se puede bajar para revelar la vista de control de actualización. Tan pronto como la colección excede la altura de su contenedor principal, se tira hacia abajo y revela la vista de actualización.

He configurado un proyecto rápido de iOS con solo UICollectionView dentro de la vista principal, con una salida a la vista de colección para poder agregarle el UIRefreshControl en viewDidLoad . También hay un prototipo de celda con el identificador de reutilización cCell

Este es todo el código en el controlador, y demuestra bastante bien el problema. En este código, establezco la altura de la celda en 100, que no es suficiente para llenar la pantalla, y por lo tanto, no se puede extraer la vista y no se mostrará el control de actualización. Configúralo en algo más alto para llenar la pantalla, luego funciona. ¿Algunas ideas?

@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); }


Atributos / Vista de desplazamiento / Rebote verticalmente en Storyboard / Xib


La respuesta de Larry es rápida:

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


Prueba esto:

self.collectionView.alwaysBounceVertical = YES;

Código completo para un 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;


Si su vista de collectionview tiene un tamaño de contenido lo suficientemente grande como para desplazarse verticalmente, está bien, pero en su caso no lo es.

Debe habilitar la propiedad AlwaysBounceVertical para que pueda establecer self.collectionView.alwaysBounceVertical = YES;


Yo también estaba enfrentando el mismo problema, no pude usar el UIRefreshControl hasta que el tamaño del contenido de UICollectionView fuera lo suficientemente grande como para desplazarse verticalmente.

Establecer la propiedad de bounces de UICollectionView resolvió esto

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