Estoy tratando de agregar a UIRefreshControl
a UICollectionView
, pero el problema es que el control de actualización no aparece a menos que la vista de recopilació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 desplegar para revelar la vista de control de actualización. Tan pronto como la colección excede la altura de su contenedor principal, se despliega y revela la vista de actualización.
He creado un proyecto IOS rápida con sólo una UICollectionView
dentro de la vista principal, con una salida a la vista de colección para que pueda añadir el UIRefreshControl
a ella en viewDidLoad
. También hay una celda prototipo con el identificador de reutilizacióncCell
Este es todo el código en el controlador, y demuestra el problema bastante bien. En este código, establezco la altura de la celda en 100, que no es suficiente para llenar la pantalla y, por lo tanto, la vista no se puede extraer y el control de actualización no se mostrará. Ajústelo a 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);
}
alwaysBounceVertical
Respuestas:
Prueba esto:
self.collectionView.alwaysBounceVertical = YES;
Código completo para un
UIRefreshControl
fuente
[refreshControl endRefreshing]
.UIScrollView
(una vista general deUICollectionView
) tiene unarefreshControl
propiedad ahora developer.apple.com/videos/play/wwdc2016/219/?time=2033Atributos / Vista de desplazamiento / Rebotar verticalmente en Storyboard / Xib
fuente
La respuesta de Larry rápidamente:
Swift 3:
fuente
UIColor.whiteColor()
color que desee.action: #selector(self.refresh)
Si
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 poder establecerself.collectionView.alwaysBounceVertical = YES;
fuente
Yo también estaba enfrentando el mismo problema, no pude usarlo
UIRefreshControl
hasta que elUICollectionView
tamaño del contenido era lo suficientemente grande como para desplazarme verticalmente,Estableciendo la
bounces
propiedad deUICollectionView
resuelto estefuente
Llamo
beginRefreshing()
justo despuésviewDidLoad()
, pero en algunas pantallas no funciona. Y solocollectionView.layoutIfNeeded()
enviewDidLoad()
me ayudófuente
Debe verificar la llamada a la API si la vista de colección está en estado de actualización y luego finalizar la actualización para descartar el control de actualización.
fuente