Próbuję dodać a UIRefreshControl
do UICollectionView
, ale problem polega na tym, że formant odświeżania nie pojawia się, chyba że widok kolekcji wypełnia wysokość jego kontenera nadrzędnego. Innymi słowy, o ile widok kolekcji nie jest wystarczająco długi, aby wymagać przewijania, nie można go wyciągnąć w dół, aby wyświetlić widok kontrolki odświeżania. Gdy tylko kolekcja przekroczy wysokość swojego kontenera nadrzędnego, jest rozwijana w dół i ujawnia widok odświeżania.
Skonfigurowałem szybki projekt na iOS z tylko UICollectionView
wewnętrznym widokiem głównym, z wyjściem do widoku kolekcji, aby móc dodać UIRefreshControl
do niego viewDidLoad
. Istnieje również komórka prototypowa z identyfikatorem ponownego wykorzystaniacCell
To jest cały kod kontrolera, który całkiem dobrze pokazuje problem. W tym kodzie ustawiłem wysokość komórki na 100, co nie wystarczy do wypełnienia ekranu, dlatego widok nie może zostać wyciągnięty, a kontrolka odświeżania się nie pokaże. Ustaw go na coś wyższego, aby wypełnić ekran, a potem zadziała. Jakieś pomysły?
@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
Odpowiedzi:
Spróbuj tego:
self.collectionView.alwaysBounceVertical = YES;
Kompletny kod dla
UIRefreshControl
źródło
[refreshControl endRefreshing]
.UIScrollView
(nadzórUICollectionView
) marefreshControl
teraz właściwość developer.apple.com/videos/play/wwdc2016/219/?time=2033Atrybuty / Przewijanie widoku / Odbijanie w pionie w Storyboard / Xib
źródło
Szybka odpowiedź Larry'ego:
Swift 3:
źródło
UIColor.whiteColor()
kolorem lub innym kolorem.action: #selector(self.refresh)
Jeśli Twój
collectionview
rozmiar treści jest wystarczająco duży, aby przewijać w pionie, jest OK, ale w Twoim przypadku tak nie jest.Musisz włączyć właściwość
AlwaysBounceVertical
, aby móc ustawićself.collectionView.alwaysBounceVertical = YES;
źródło
Ja też miałem do czynienia z tym samym problemem, nie mogłem korzystać z funkcji,
UIRefreshControl
dopókiUICollectionView
rozmiar zawartości nie był wystarczająco duży, aby przewijać w pionie,Ustawienie
bounces
właściwościUICollectionView
rozwiązało toźródło
Dzwonię
beginRefreshing()
zaraz potemviewDidLoad()
, ale na niektórych ekranach to nie działa. I tylkocollectionView.layoutIfNeeded()
wviewDidLoad()
bardzo mi pomógłźródło
Musisz sprawdzić wywołanie interfejsu API, jeśli widok kolekcji jest w stanie odświeżania, a następnie zakończ odświeżanie, aby odrzucić kontrolę odświeżania.
źródło