【问题标题】:Resize UICollectionView while scrolling滚动时调整 UICollectionView 的大小
【发布时间】:2013-03-07 16:30:58
【问题描述】:

我的收藏视图开始时很短暂,在它的视图控制器视图的底部。当用户向上滚动一点时,我希望集合填充视图。当用户拉入反弹区域时,我希望它再次缩小。

这是我想要工作的代码(我认为应该工作):

- (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 来正确重新定位内容,但是滚动触摸停止工作。

不久前,我用表格视图(或其他类型的滚动视图)尝试了类似的操作,但遇到了类似的挂断。如果有人解决了这个问题,非常感激......

【问题讨论】:

    标签: iphone ios uiscrollview uicollectionview


    【解决方案1】:

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

    self.view 是 UIScrollView 吗?

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

    【讨论】:

    • 谢谢。这是一个带有 UIView (self.view) 的视图控制器(我的 sn-p 中的 self)。其中一个子视图是我的集合视图(我相信您知道,它是 UIScrollView 的子类)。
    猜你喜欢
    • 1970-01-01
    • 2016-01-14
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    相关资源
    最近更新 更多