Ich möchte Pulldown-to-Refresh UICollectionViewController
unter iOS 6 implementieren . Dies war mit einem UITableViewController
wie folgt einfach zu erreichen :
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(startRefresh:)
forControlEvents:UIControlEventValueChanged];
self.refreshControl = refreshControl;
Das obige implementiert eine nette Liquid-Drop-Animation als Teil eines nativen Widgets.
Da UICollectionViewController
es sich um eine "weiterentwickelte" UITableViewController
Version handelt, würde man eine gewisse Parität von Funktionen erwarten, aber ich kann nirgendwo einen Hinweis auf eine integrierte Methode finden, um dies zu implementieren.
- Gibt es eine einfache Möglichkeit, dies zu tun, die ich übersehen habe?
- Kann trotz des Headers und der Dokumente, die beide angeben, dass es für die Verwendung mit einer Tabellenansicht vorgesehen
UIRefreshControl
ist, irgendwieUICollectionViewController
verwendet werden?
_refreshControl = blah
, und führen Sie dannstartRefresh:
, wenn die Arbeit erledigt ist, a aus_refreshControl endRefreshing];
.Ich suchte nach der gleichen Lösung, aber in Swift. Basierend auf der obigen Antwort habe ich Folgendes getan:
let refreshCtrl = UIRefreshControl() ... refreshCtrl.addTarget(self, action: "startRefresh", forControlEvents: .ValueChanged) collectionView?.addSubview(refreshCtrl)
Nicht zu vergessen:
refreshCtrl.endRefreshing()
quelle
Ich habe Storyboard verwendet und die Einstellung
self.collectionView.alwaysBounceVertical = YES;
hat nicht funktioniert. Auswahl derBounces
undBounces Vertically
erledigt den Job für mich.quelle
Die
refreshControl
Eigenschaft wurde abUIScrollView
iOS 10 hinzugefügt, sodass Sie das Aktualisierungssteuerelement direkt in Sammlungsansichten festlegen können.https://developer.apple.com/reference/uikit/uiscrollview/2127691-refreshcontrol
UIRefreshControl *refreshControl = [UIRefreshControl new]; [refreshControl addTarget:self action:@selector(refreshControlAction:) forControlEvents:UIControlEventValueChanged]; self.collectionView.refreshControl = refreshControl;
quelle
Die Antwort von mjh ist richtig.
Ich bin auf das Problem gestoßen, dass man, wenn das
collectionView.contentSize
nicht größer als das istcollectionView.frame.size
, das Scrollen nicht bekommen kanncollectionView
. Sie können diecontentSize
Eigenschaft auch nicht festlegen (zumindest konnte ich nicht).Wenn es nicht scrollen kann, können Sie nicht zum Aktualisieren ziehen.
Meine Lösung bestand
UICollectionViewFlowLayout
darin, die Methode zu unterordnen und zu überschreiben:- (CGSize)collectionViewContentSize { CGFloat height = [super collectionViewContentSize].height; // Always returns a contentSize larger then frame so it can scroll and UIRefreshControl will work if (height < self.collectionView.bounds.size.height) { height = self.collectionView.bounds.size.height + 1; } return CGSizeMake([super collectionViewContentSize].width, height); }
quelle
self.collectionView.alwaysBounceVertical = YES;
. Gutschrift geht an diese Antwort .