Estou tentando adicionar um UIRefreshControl
a um UICollectionView
, mas o problema é que o controle de atualização não aparece, a menos que o modo de exibição de coleção preencha a altura do seu contêiner pai. Em outras palavras, a menos que a visualização da coleção seja longa o suficiente para exigir rolagem, ela não poderá ser puxada para baixo para revelar a visualização do controle de atualização. Assim que a coleção exceder a altura do contêiner pai, ela é puxada para baixo e revela a exibição de atualização.
Eu configurei um projeto iOS rápido, com apenas uma parte UICollectionView
interna da visualização principal, com uma saída para a visualização de coleção, para que eu possa adicioná UIRefreshControl
-la viewDidLoad
. Há também uma célula protótipo com o identificador de reutilizaçãocCell
Esse é todo o código no controlador e demonstra muito bem o problema. Nesse código, defino a altura da célula como 100, o que não é suficiente para preencher a exibição e, portanto, a visualização não pode ser puxada e o controle de atualização não será exibido. Defina-o como algo mais alto para preencher a tela e funcionará. Alguma ideia?
@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);
}
fonte
alwaysBounceVertical
Respostas:
Tente o seguinte:
self.collectionView.alwaysBounceVertical = YES;
Código completo para um
UIRefreshControl
fonte
[refreshControl endRefreshing]
.UIScrollView
(uma visão geral deUICollectionView
) tem umarefreshControl
propriedade agora developer.apple.com/videos/play/wwdc2016/219/?time=2033Atributos / Exibição de rolagem / rejeição verticalmente no Storyboard / Xib
fonte
A resposta de Larry rapidamente:
Swift 3:
fonte
UIColor.whiteColor()
qualquer cor que você desejar.action: #selector(self.refresh)
Se você
collectionview
tem um tamanho de conteúdo grande o suficiente para rolar verticalmente, tudo bem, mas, no seu caso, não é.Você deve habilitar a propriedade
AlwaysBounceVertical
para poder definirself.collectionView.alwaysBounceVertical = YES;
fonte
Eu também estava enfrentando o mesmo problema, não pude usá-lo
UIRefreshControl
até que oUICollectionView
tamanho do conteúdo fosse grande o suficiente para rolar verticalmente,Definir a
bounces
propriedade deUICollectionView
resolveu estefonte
Estou ligando
beginRefreshing()
logo depoisviewDidLoad()
, mas em algumas telas não funciona. E sócollectionView.layoutIfNeeded()
emviewDidLoad()
me ajudoufonte
Você deve efetuar o check-in na chamada da API, se a exibição da coleção estiver no estado de atualização e terminar a atualização para dispensar o controle de atualização.
fonte