2013-04-17 3 views
45

У меня есть UICollectionView с UICollectionViewDataSource, который в настоящее время предоставляет шесть предметов. Это меньше, чем необходимо для заполнения экрана. Проблема в том, что мой просмотр коллекции только прокручивается, когда для заполнения экрана достаточно элементов (проверено 10, 20). При отображении меньшего количества элементов он даже не сделает эту анимацию отказов, которую я пытаюсь получить, она просто исправлена.UICollectionView не прокручивает

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateCollectionViewData) name:UIDocumentStateChangedNotification object:nil]; 

    UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init]; 
    flowLayout.itemSize = CGSizeMake(160, 100); 
    flowLayout.minimumInteritemSpacing = 0; 
    flowLayout.minimumLineSpacing = 0; 

    self.collectionView = [[UICollectionView alloc]initWithFrame:self.view.bounds collectionViewLayout:flowLayout]; 
    [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"Cell"]; 
    self.collectionView.delegate = self; 
    self.collectionView.dataSource = self; 
    self.collectionView.bounces = YES; 
    [self.view addSubview:self.collectionView]; 
} 

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { 
    return [self.collectionViewData count]; 
} 
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath]; 

    Expense *expense = [self.collectionViewData objectAtIndex:indexPath.row]; 

    UILabel *label = [[UILabel alloc]initWithFrame:cell.bounds]; 
    label.text = expense.value; 
    label.backgroundColor = [UIColor clearColor]; 
    label.font = [UIFont fontWithName:@"Miso-Bold" size:30]; 
    label.textAlignment = NSTextAlignmentCenter; 
    [cell addSubview:label]; 

    cell.backgroundColor = [UIColor colorWithRed:1 - (indexPath.row/30.0f) green:0 blue:1 alpha:1]; 

    return cell; 
} 

Благодарим за помощь!

ответ

151

bounces, несмотря на свое имя, не является подходящей категорией. Вам также необходимо установить alwaysBounceVertical и/или alwaysBounceHorizontal. Из документации:

Если это свойство установлено значение YES и отскоков будет ДА, вертикальное перетаскивание разрешено даже если содержание меньше, чем пределы представления прокрутки. Значение по умолчанию: NO.


Примечание запутанного имя в IB .. https://stackoverflow.com/a/18391029/294884

+0

Это правильный ответ - OP должен принять это как ответ. –

+0

отличная подсказка спасибо – Fattie

+0

Спасибо, это работает как шарм :) – evya

4

Установка высоты UICollectionView на размер UIView сделает вашу проблему прокрутки отключенной. Если UICollectionView имеет высоту 568 пикселей, ему потребуется только прокрутка, если в нем содержится более 568 пикселов. Вы должны установить его на высоту представления, в котором оно содержится (так же, как и ширина).

Надеюсь, это поможет вам.

+0

добавление ограничения в IB для сохранения краев UICollectionView так же, как края его супервизора решают мою проблему – Colin

9

С раскадровкой в ​​атрибутах инспектора для представления коллекции «отскакивает» и «Отказы по вертикали» должно быть проверено.

Смежные вопросы