UIRefreshController passa por UICollectionView
-
20-12-2019 - |
Pergunta
Este é um bug que acontece com frequência, mas nem sempre.Eu tenho um controle de atualização adicionado ao meu UICollectionView.Quando atualizo, funciona perfeitamente.No entanto, se eu atualizá-lo pela metade várias vezes ou até mesmo fazer uma atualização completa, vá para outra guia no aplicativo e depois retorne, quando eu atualizar, o UIRefreshControl aparecerá sobre parte do UICollectionView.Além disso, em vez de começar com zero barras giratórias de atualização, ele começa com tudo carregado (no entanto, percebi isso em outros aplicativos, como o Mail, então isso é um bug do sistema operacional, mas nos aplicativos do sistema operacional, o botão giratório não passa por cima o conteúdo).Aqui está uma imagem do problema: https://www.dropbox.com/s/4qk6qjrdlapsvz0/IMG_0074.JPGVeja como configuro o RefreshController no ViewDidLoad.
refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(refresh2)
forControlEvents:UIControlEventValueChanged];
[self.collectionView addSubview:refreshControl];
self.collectionView.alwaysBounceVertical = YES;
Alguém sabe como fazer o spinner ficar atrás do CollectionViewController?Obrigado
Solução
Eu também tive esse problema e descobri, então pensei em compartilhar.o que fiz foi forçá-lo para trás do UICollectionView.Eu tentei outras coisas como sendSubViewToBack e definir o zIndex do UICollectionViewCell, mas não funcionou.Porém abaixo funcionou e testei no iOS 6+:
refreshControl.layer.zPosition = -1;
Para iOS 6, adicione isto:
refreshControl.userInteractionEnabled = NO;
Outras dicas
Problema:Você começa a rolar para baixo e revela parcialmente o UIRefreshControl, mas não rola totalmente para baixo para fazê-lo começar a girar.Você navega para outra visualização (ou "minimiza" o aplicativo, envia para segundo plano) e volta.Você rola um pouco e o UIRefreshControl aparece no topo da sua coleção, totalmente carregado, indesejado e sem girar.
Solução:Você precisa finalizar a atualização no viewWillDissappear e no aplicativo sendo enviado para segundo plano.
var refreshControl = UIRefreshControl()
override func viewDidLoad() {
super.viewDidLoad()
refreshControl.addTarget(self, action: #selector(ViewController.methodNameForRefreshing), forControlEvents: .ValueChanged)
collectionView.addSubview(refreshControl)
//or
tableView.addSubview(refreshControl)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.willResignActiveNotif), name: UIApplicationWillResignActiveNotification, object: nil)
}
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
refreshControl.endRefreshing()
}
func willResignActiveNotif(notification: NSNotification) {
refreshControl.endRefreshing()
}