2013-03-19 2 views
4

Мой просмотр коллекции начинает жизнь короткой, в нижней части ее зрения контроллера. Когда пользователь немного прокручивается, я хотел бы, чтобы коллекция заполнила представление. Я бы хотел, чтобы он снова сжимался, когда пользователь спускался в область отказов.Изменение размера UICollectionView при прокрутке

Вот код, который я хотел бы сделать работу (и я думаю, что должно работать):

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { 
    if (scrollView == self.collectionView) { 
     CGFloat offsetY = self.collectionView.contentOffset.y; 
     if (offsetY > 20.0) { 
      [self setCollectionViewExpanded:YES]; 
     } else if (offsetY < -10.0) { 
      [self setCollectionViewExpanded:NO]; 
     } 
    } 
} 

- (void)setCollectionViewExpanded:(BOOL)expanded { 

    // avoid starting a do-nothing animation 
    BOOL currentlyExpanded = self.collectionView.frame.origin.y == 0.0; 
    if (expanded == currentlyExpanded) return; 

    // note: the collection view is the uppermost subview of the vc's view 
    // expanding to view bounds makes it cover every other view 
    CGRect newFrame = (expanded)? self.view.bounds : CGRectMake(0.0, 240.0, 320.0, self.view.bounds.size.height-240.0); 
    [UIView animateWithDuration:0.3 animations:^{ 
     self.collectionView.frame = newFrame; 
    }]; 
} 

Но после того, как расширение происходит, клетки остаются в том же положении по отношению к родительскому мнению (по-прежнему рядом с дном), и просмотр коллекции перестает отвечать на панорамы и не отправляет дальнейшие уведомления о прокрутке.

Я могу получить содержимое, перемещенное должным образом, выполнив reloadData в блоке завершения анимации, но прокручивающие штрихи перестают работать в любом случае.

Некоторое время назад я попробовал что-то вроде этого с табличным представлением (или другим видом прокрутки) и столкнулся с подобным зависанием. Очень важно, если кто-нибудь это решит ...

ответ

0

Можете ли вы описать свою иерархию взглядов немного лучше? Является ли UICollectionView подпунктом UIScrollView?

self.view a UIScrollView?

  • В этом случае начало координат является содержимым прокруткиОфис (не 0,0). Это может привести к непредвиденному кадру вашего UICollectionView.
  • Если UICollectionView является подзоном прокрутки, начало кадра представляет собой начало представления в пространстве прокрутки. Поэтому не меняйте исходный код кадра (только его размер) и задайте contentOffset для scrollView, чтобы сделать его видимым.
+0

Спасибо. Это контроллер представления (self in my snippet) с UIView (self.view). Одним из подзонов является мой просмотр коллекции (который, как я уверен, вы знаете, является подклассом UIScrollView). – danh

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

  • Нет связанных вопросов^_^