我的集合视图开始很短,在它的视图控制器视图的底部。当用户向上滚动一点时,我希望集合填充视图。当用户拉入反弹区域时,我希望它再次缩小。
这是我想让工作的代码(我认为应该工作):
- (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;
}];
}
但是在展开之后,单元格相对于父视图保持在相同的位置(仍然靠近底部),并且集合视图停止响应平移触摸并且不再发送 didScroll 通知。
我可以通过在动画完成块中执行 reloadData 来正确重新定位内容,但是滚动触摸停止工作。
不久前,我用表格视图(或另一种滚动视图)尝试了类似的操作,但遇到了类似的挂断。如果有人解决了这个问题,非常感谢...