UIRefreshControl на UICollectionView работает только в том случае, если коллекция заполняет высоту контейнера
Я пытаюсь добавить UIRefreshControl
до UICollectionView
, но проблема в том, что элемент управления refresh не отображается, если представление коллекции не заполняет высоту родительского контейнера. Другими словами, если представление коллекции не достаточно длинное, чтобы требовать прокрутки, его нельзя потянуть вниз, чтобы открыть представление элемента управления обновлением. Как только коллекция превышает высоту родительского контейнера, она опускается вниз и открывает представление обновления.
Я настроил быстрый проект iOS с помощью всего лишь UICollectionView
внутри основного вида, с выходом на вид коллекции, так что я могу добавить UIRefreshControl
к нему в viewDidLoad
. Существует также ячейка-прототип с идентификатором "reuse"cCell
это весь код в контроллер, и это показывает очень хорошо. В этом коде я установил высоту ячейки в 100, что недостаточно для заполнения дисплея, и поэтому представление не может быть вытащено, и элемент управления обновлением не будет отображаться. Установите его на что-то выше, чтобы заполнить дисплей, то он работает. Есть идеи?
@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);
}
5 ответов:
попробуйте это:
self.collectionView.alwaysBounceVertical = YES;
полный код
UIRefreshControl
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init]; refreshControl.tintColor = [UIColor grayColor]; [refreshControl addTarget:self action:@selector(refershControlAction) forControlEvents:UIControlEventValueChanged]; [self.collectionView addSubview:refreshControl]; self.collectionView.alwaysBounceVertical = YES;
ответ Ларри в swift:
let refreshControl = UIRefreshControl() refreshControl.tintColor = UIColor.blueColor() refreshControl.addTarget(self, action: "refresh", forControlEvents: .ValueChanged) collectionView.addSubview(refreshControl) collectionView.alwaysBounceVertical = true
Swift 3:
let refreshControl = UIRefreshControl() refreshControl.tintColor = .blue refreshControl.addTarget(self, action: #selector(refresh), for: .valueChanged) collectionView.addSubview(refreshControl) collectionView.alwaysBounceVertical = true
Если
collectionview
имеет размер содержимого достаточно большой для прокрутки по вертикали, это нормально, но в вашем случае это не так.вы должны включить в собственность
AlwaysBounceVertical
, Так что вы можете установитьself.collectionView.alwaysBounceVertical = YES;
я тоже столкнулся с той же проблемой, я не смог использовать
UIRefreshControl
доUICollectionView
размер содержимого был достаточно большим, чтобы прокручивать по вертикали,задание
bounces
собственностьUICollectionView
решил эту[self.collectionView setBounces:YES]; [self.collectionView setAlwaysBounceVertical:YES];