【问题标题】:Scroll Multiple UICollectionView with one collectionview IOS使用一个collectionview IOS滚动多个UICollectionView
【发布时间】:2014-11-05 15:57:49
【问题描述】:

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

现在,我想要的是:当我向任何方向滚动一个 collectionview 时,我的表格的所有其他 collectionview 都应该相应地向那个方向滚动。

我尝试过使用滚动视图代理,但它不能正常工作。

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

需要帮助!谢谢

【问题讨论】:

  • 但是,如果我理解你的问题,你只需要collection view,为什么需要tableview?
  • 实际上我有多个数组填充collectionview。因为它们都是不同的类型,显示不同的数据。这就是为什么,根据我的理解,我同时使用了这两种方法。
  • 所以每一行都有不同的数据,比如第一行是字符串数组,第二行是数字数组,等等?
  • 您应该显示您尝试过的代码。无论如何,由于单元重用,它只适用于可见单元。
  • 我想要这样的东西:connectedhome2go.files.wordpress.com/2010/05/… 当您滚动任何集合视图时,其他所有集合视图也会滚动。

标签: ios objective-c ipad uicollectionview collectionview


【解决方案1】:

好的,我检查了我的代码,我所做的是:我在屏幕左侧有一个 tableView,其余的是一个 UIScrollView,在它里面我在顶部有一个宽度等于collectionView.contentSize.width,在该视图下方,collectionView,其高度等于屏幕高度,其宽度等于其 contentSize.width。之后,ScrollView 只水平滚动,collectionView 只垂直滚动,所以,当你水平滚动时,tableView 保持不变,而 header view 和 collection 水平滚动,如果你垂直滚动,header view 保持固定,并且集合视图和 tableView 同时滚动(您必须链接它们的委托)。

这就是我在 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的单元格高度一致。

【讨论】:

    【解决方案2】:

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

    // 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 大于另一个视图时,您需要添加条件逻辑来处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多