在Swift中同步滚动与两个集合视图?

时间:2016-08-18 01:30:10

标签: ios swift uiscrollview uicollectionview

是否有练习使用单元格滚动集合视图,并根据其内容偏移量滚动其他集合视图?

我有一个主集合视图,它有两个单元格并水平滚动。然后我有第二个集合视图,其中单元格垂直滚动。当我向上滚动,然后水平滚动到第二个垂直cv时,会发生什么事情,它与第一个cv的关系不同步。

我覆盖了垂直滚动集合视图中的scrollViewDidScroll(不是主视图,因为它水平滚动),无效(**表示无法实现我的效果的部分)。

var didScrollPastProfileView: Bool = false

func scrollViewDidScroll(scrollView: UIScrollView) {
    let collectionViewDictionary = ["scrollView": self.collectionView]
    NSNotificationCenter.defaultCenter().postNotificationName("cvDidScroll", object: nil, userInfo: collectionViewDictionary)

if scrollView.contentOffset.y > 250 {

    **self.didScrollPastProfileView = true
    if self.didScrollPastProfileView {
       let previousContentOffset = scrollView.contentOffset.y
       scrollView.contentOffset.y = previousContentOffset
    }**

    } else if scrollView.contentOffset.y < 250 {

        **let previousContentOffset = scrollView.contentOffset.y
        scrollView.contentOffset.y = previousContentOffset
        self.didScrollPastProfileView = false**
    }

}

这是一个视觉效果:

TableCellRenderer

当我滚动到第二个单元格时,注意上面有空格吗?我希望垂直滚动视图遵循第一个。有什么建议吗?

编辑:当我在第一个单元格中滚动时,我尝试访问水平集合视图的第二个单元格,当我在第一个单元格中向下滚动时,我尝试更改contentOffSet.y,但是我收到了EXC_BAD_ACCESS错误。

if scrollView.contentOffset.y <= 250.0 {
        let groupsPosts = childViewControllerForPosts.collectionView(childViewControllerForPosts.collectionView!, cellForItemAtIndexPath: NSIndexPath(forItem: 1, inSection: 0)) as! FeedCell
        groupsPosts.collectionView.contentOffset.y =  -scrollView.contentOffset.y

        self.topVerticalConstraint?.constant = -scrollView.contentOffset.y

1 个答案:

答案 0 :(得分:0)

当您使用collectionViewBanimated滚动到false时,您可以执行以下操作,因此看起来它已同步。

let indexPath = collectionViewA.indexPathsForVisibleItems().first
self.collectionViewB.scrollToItemAtIndexPath(indexPath, atScrollPosition: UICollectionViewScrollPosition.Top, animated: false) 

不完全确定如何设置这两个集合。如果您无权访问collectionViewA,则可能必须将当前indexPath保存到变量并将其传递。