Мой просмотр коллекции начинает жизнь короткой, в нижней части ее зрения контроллера. Когда пользователь немного прокручивается, я хотел бы, чтобы коллекция заполнила представление. Я бы хотел, чтобы он снова сжимался, когда пользователь спускался в область отказов.Изменение размера 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 в блоке завершения анимации, но прокручивающие штрихи перестают работать в любом случае.
Некоторое время назад я попробовал что-то вроде этого с табличным представлением (или другим видом прокрутки) и столкнулся с подобным зависанием. Очень важно, если кто-нибудь это решит ...
Спасибо. Это контроллер представления (self in my snippet) с UIView (self.view). Одним из подзонов является мой просмотр коллекции (который, как я уверен, вы знаете, является подклассом UIScrollView). – danh