在 UICollectionViewCell 内的 UICollectionView 中平滑滚动

Posted

技术标签:

【中文标题】在 UICollectionViewCell 内的 UICollectionView 中平滑滚动【英文标题】:Smooth scrolling In UICollectionView inside UICollectionViewCell 【发布时间】:2014-11-17 11:24:40 【问题描述】:

我在 UICollectionViewCell 中使用 UICollectionView。顶部 CollectionView 将沿垂直方向滚动(左 右),内部 CollectionView 将沿水平方向滚动(上 下)..

当我滚动 Top collectionView 时,从上到下滚动不流畅,因为 Inner CollectionView 滚动。

有什么方法可以从TopBottom平滑滚动顶部的CollectionView?

Top CollectionView 数据源方法

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

static NSString *cellIdentifier = @"CellId";

CustomCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath]

......

......



 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
 retrun 10;

 

 **Within CustomCollectionViewCell Inner CollectionView Datasource**

 - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

 static NSString *cellIdentifier = @"CellId";

 CustomCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath]

 ......

 ......



- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
retrun 10;


【问题讨论】:

内部集合视图的数据源放在哪里? 为内部UICollectionView维护单独的类,复杂度会降低并且可以轻松解决 【参考方案1】:

如果将集合视图的委托和数据源放在主集合视图单元格中,则不会有任何问题。

如下:

集合视图单元格界面:

@interface GalleryCell()
<UICollectionViewDataSource, UICollectionViewDelegate>

    NSArray *dataSourceArray;

@end

及实施:

@implementation GalleryCell

            #pragma - datasources
            // Defines the number of cells in a section of collection view
            - (NSInteger)collectionView:(UICollectionView *)cv numberOfItemsInSection:(NSInteger)section;
            
                return dataSourceArray.count;
            

            // Defines the cells in the collection view
            - (UICollectionViewCell *)collectionView:(UICollectionView *)cv cellForItemAtIndexPath:(NSIndexPath *)indexPath;
            
                UICollectionViewCell *cell = [cv dequeueReusableCellWithReuseIdentifier:@"cellId" forIndexPath:indexPath];
                return cell;
            
    @end

【讨论】:

我将内部 collectionview 委托和数据源方法放在主 UICollectionViewCell 类中。【参考方案2】:

实际上您所做的是错误的方法,您使用UICollectionView 作为UICollectionViewCell 内的容器...滚动器找不到我必须滚动外部控件的对象,即您的根UICollectionViewUICollectionView 内的 UICollectionViewCell。如果你能弄清楚一些,你可以尝试一些其他的方法。或者如果你想出一些示例代码会很好。

【讨论】:

您可以在UICollectionView底部添加手势。

以上是关于在 UICollectionViewCell 内的 UICollectionView 中平滑滚动的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式在特定 UICollectionViewCell 内的 TableView?

从 uiviewcontroller 操作 uicollectionviewcell 内的 uicollectionview

uiCollectionViewCell 内的 Uitableview

如何更改 UICollectionViewCell 内的 UILabel 的值?

Swift - 从 UICollectionViewCell 内的视图中删除约束

如何同步 UICollectionViewCell 内的 UITableView 之间的滚动(在 UICollectionViewController 内)