使用一个collectionview IOS滚动多个UICollectionView

时间:2014-11-05 15:57:49

标签: ios objective-c ipad uicollectionview collectionview

我正在开发一个应用程序,其中我有UITableView,在uitableview的每个单元格中,我都有uicollectionview水平滚动。

现在,我想要的是:当我向任何方向滚动一个集合视图时,我的表的所有其他集合视图应该在该方向上相应地滚动。

我尝试使用scrollview委托,但它无法正常工作。

我陷入了这个问题。我已经在互联网上看了,但还没找到任何东西。

需要帮助!感谢

2 个答案:

答案 0 :(得分:5)

好的我已经检查了我的代码,我的工作是:我在屏幕的左侧有一个tableView,其余的是UIScrollView,在里面我有一个宽度等于的视图collectionView.contentSize.width,在该视图下方,collectionView,其高度等于屏幕高度,其宽度等于其contentSize.width。之后,ScrollView只能水平滚动,而collectionView只能垂直滚动,所以,当你水平滚动时,tableView会停留,标题视图和集合会水平滚动,如果你垂直滚动,标题视图会保持不变,并且集合视图和tableView同时滚动(你必须链接他们的代表)。

enter image description here

这就是我在UIScrollViewDelegate中所做的事情

pragma mark - UIScrollViewDelegate

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (scrollView == _scrollView) {
        if (scrollView.contentOffset.y > 0  ||  scrollView.contentOffset.y < 0 ) {
            scrollView.contentOffset = CGPointMake(scrollView.contentOffset.x, 0);
        }
    } else {
        _tableView.contentOffset = CGPointMake(0, scrollView.contentOffset.y);
        _collectionView.contentOffset = CGPointMake(0, scrollView.contentOffset.y);
    }
}

tableView的单元格高度和collectionView单元格的高度相同。

答案 1 :(得分:2)

您可以通过将包含视图控制器声明为UITableViewDelegate并实现scrollView委托方法来协调两个tableviews:

// say tv0 and tv1 are outlets to two table views
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if (scrollView == self.tv0) {
        self.tv1.contentOffset = self.tv0.contentOffset;
    } else if (scrollView == self.tv1) {
        self.tv0.contentOffset = self.tv1.contentOffset;
    }
}

首先要使用具有相同长度内容的几个简单表视图来解决这个问题。您需要添加条件逻辑来处理一个视图的contentSize大于另一个视图的时间。