滚动时调整UICollectionView的大小

时间:2013-03-19 05:24:36

标签: iphone ios uiscrollview 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;
    }];
}

但是在扩展发生后,单元格保持在相对于父视图的相同位置(仍然靠近底部),并且集合视图停止响应平移触摸并且不再发送didScroll通知。

我可以通过在动画完成块中执行reloadData来正确地重新定位内容,但滚动触摸会以任何方式停止工作。

前段时间,我尝试使用表格视图(或其他类型的滚动视图)进行类似的挂机操作。如果有人解决了这个问题,那就太大了......

1 个答案:

答案 0 :(得分:0)

您能更好地描述您的视图层次结构吗? UICollectionView是UIScrollView的子视图吗?

self.view是UIScrollView吗?

  • 在这种情况下,bounds origin是scrollview的contentOffset(不是0,0)。这可能会给你的UICollectionView一个意想不到的框架。
  • 如果UICollectionView是scrollview的子视图,则框架原点是scrollview-space中视图的原点。所以不要更改框架的原点(只是它的大小)并设置scrollView的contentOffset以使其可见。