创建一个与另一个 UICollectionView 一起滚动的 UICollectionView

Posted

技术标签:

【中文标题】创建一个与另一个 UICollectionView 一起滚动的 UICollectionView【英文标题】:Create a UICollectionView that scrolls with another UICollectionView 【发布时间】:2016-12-18 23:39:29 【问题描述】:

我已经构建了 2 个集合视图,1 个水平滚动(在顶部)和 1 个垂直滚动(在中间 - 底部),用于在我的 Objective-C ios 应用程序中查看 2 组不同的内容,类似于这张 Instagram 截图:

我正在尝试添加功能以使水平滚动的集合视图在用户向上滚动垂直滚动视图时消失。完成这项任务的最佳方法是什么?我查找了有关在另一个集合视图的单元格中添加集合视图的教程,但我找不到任何关于将集合视图添加到另一个集合视图的第一个单元格的任何内容。实现此功能的最佳方法是什么?

【问题讨论】:

【参考方案1】:

我认为你应该将 UITableView 与 UICollectionView 一起使用。在屏幕截图上,我认为水平集合视图嵌入在 tableview 的第一个单元格中。而当使用开始滚动tableview时,第一行就随心所欲地消失了。

编辑

使用 2 个原型单元创建 uitableview。创建水平集合视图并将其嵌入到 tableview 的第一个单元格中,这是第一个原型单元格。然后为图像创建第二个原型单元。当用户开始滚动表格视图时,第一个单元格将消失,如您所愿。

【讨论】:

也可以将水平集合视图嵌入到垂直集合视图的第一个单元格中。 tableView 是否只有 2 个单元格? 1 用于水平集合视图,1 用于垂直? @Roger99 如果您的意思是原型单元,那么可以。但我认为您可以使用一个集合视图(在第一个单元格中用于水平集合视图)和其他表用于垂直。但你应该随心所欲地使用它。【参考方案2】:

如果您不想使用其他建议的方法将水平集合视图嵌入到垂直集合视图的顶部单元格中,您可以使用垂直集合视图的滚动回调(scrollViewDidScroll,因为 UICollectionView子类UIScrollView)。当垂直集合视图滚动时,您可以根据垂直集合视图的contentOffset 对顶部集合视图应用变换以将其移出屏幕顶部,然后在contentOffset 接近0 时重新出现.

请记住,使用这种方法,垂直集合视图的框架可能是屏幕高度减去水平集合视图的高度。因此,一旦水平集合视图从视线中消失,您将需要一些额外的逻辑来扩展垂直集合视图的框架以占据整个屏幕。否则,您将在屏幕顶部看到一个尴尬的空白栏,您滚动时最初是水平集合视图。

【讨论】:

【参考方案3】:

你有两个滚动视图,我们称之为“cvHorizo​​ntal”和“cvVertical”。

您可以管理scrollViewDidScroll方法,在向上滚动时隐藏cvHorizo​​ntal,向下滚动时显示cvHorizo​​ntal。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
    if (lastContentOffset > scrollView.contentOffset.y)
       [self showCategory:YES];
        lastContentOffset = scrollView.contentOffset.y;
     else if (lastContentOffset < scrollView.contentOffset.y) 
         [self showCategory:NO];
         lastContentOffset = scrollView.contentOffset.y;
    



-(void)showCategory:(BOOL)flag
    if(flag)
        [UIView animateWithDuration:0.6 animations:^
            if(cvHorizontal.hidden )
                cvHorizontal.hidden=NO;
                cvHorizontalHeight.constant=65.0f;//manage the cvHorizontal height and all the other constraints calculation if any
            
        ];
    else 
        [UIView animateWithDuration:0.6 animations:^
            cvHorizontal.hidden=YES;
            cvHorizontalHeight.constant=0;
        ];
    

【讨论】:

以上是关于创建一个与另一个 UICollectionView 一起滚动的 UICollectionView的主要内容,如果未能解决你的问题,请参考以下文章

在连接三个表时创建的视图,一个表与另一个表相似

如何创建一个没有菜单、栏、框架、3D 效果等的窗口,并且与另一个窗口的大小完全相同?

预先创建 UICollectionView 单元格 - 布局问题

Shopify 页面模板部分与另一个页面的不同数据

如何在更新/插入之前创建一个异常,我必须将一个表的属性值与另一个表的属性值进行比较?

PHP - 从 blob 文件创建图像并在保持透明度的同时与另一个文件组合