UICollectionView 是不是滚动到索引?

Posted

技术标签:

【中文标题】UICollectionView 是不是滚动到索引?【英文标题】:UICollectionView did scroll to index?UICollectionView 是否滚动到索引? 【发布时间】:2017-09-28 18:50:48 【问题描述】:

伙计们,我需要你的帮助......我通过 UICollectionView 创建了一个自定义控件段......

CustomView.m

我有 5 个单元格,其中包含一个带有单元格标题的标签 为了通过 UILabel 的宽度获取单元格宽度,我以这种方式实现了 sizeForItemAtIndexPath 方法:

-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath  

    CGSize size = [[[self titleSection] objectAtIndex:indexPath.item] sizeWithAttributes:nil];
    return CGSizeMake(size.width +35 , self.frame.size.height);


我还创建了一个 UIView,它具有指示选择了哪个单元格的光标功能。 为了动画光标(UIView),我以这种方式实现:

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 

    NSIndexPath *newIndexPath = [NSIndexPath indexPathForItem:indexPath.item inSection:0];
    [collectionView scrollToItemAtIndexPath:newIndexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];

    UDPassData *data = [UDPassData sharedInstance];
    [data.sectionContentCollection scrollToItemAtIndexPath:newIndexPath atScrollPosition:UICollectionViewScrollPositionNone animated:YES];

    if (indexPath == newIndexPath) 
        [collectionView scrollToItemAtIndexPath:indexPath atScrollPosition:UICollectionViewScrollPositionCenteredHorizontally animated:YES];
    

    UICollectionViewLayoutAttributes *attributes = [collectionView layoutAttributesForItemAtIndexPath:newIndexPath];
    CGRect cellFrameInSuperview = [collectionView convertRect:attributes.frame toView:collectionView];
    data.index = cellFrameInSuperview;

        [UIView animateWithDuration:.4 delay:0 usingSpringWithDamping:1 initialSpringVelocity:1 options:UIViewAnimationOptionCurveEaseInOut animations:^
            _horizontalBar.frame = CGRectMake(cellFrameInSuperview.origin.x, _horizontalBar.frame.origin.y, cellFrameInSuperview.size.width   , 3);
         completion:nil];




UICollectionViewController.m

现在在另一个 ViewController 我有另一个带有水平滚动的 UICollectionView 与段控件共享索引路径,这样即使使用自定义段控件我也可以控制 collectionView 的滚动。到这里一切正常,我设法得到一切,但我只是有一个问题..

uicollection 视图滚动时段控件滑块不移动...总之,如果collectionView 在单元格二中,自定义段控件光标应该移动到我创建的段控件中的第二个单元格.. 我希望能够解释


编辑:我想要得到的是我从 Youtube 应用程序中看到的。顶部菜单...

我正在使用 2 个 collectionView 执行此操作。

第一个collectionView是菜单(内置在一个UIView自定义类中)

第二个collectionView在页面之间浏览,位于一个外部的UIViewController中

【问题讨论】:

我很确定你只需要注意速度为零? 我不明白你的意思......我不知道如何通过另一个类的scrollViewDidScroll函数来控制段控制滑块 我不确定我是否理解您的问题,但请实现 didScroll:UICollectionView 委托(继承到 UIScrollView,或您找到的任何其他 UIScrollViewDelegate 方法适当的),当它发生时,您可以滚动或更改另一个。 @Larme 可以和你简单聊聊吗? ***.com/questions/30398339/… ***.com/questions/9207474/… ***.com/questions/17303772/… ? 【参考方案1】:

请确保reloadcollectionView 数据源以更新它。

[self.collection1 performBatchUpdates:^
   [collectionView reloadData]
  completion:nil];

【讨论】:

以上是关于UICollectionView 是不是滚动到索引?的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView:在指定索引处添加项目并滚动到该项目

停止滚动时获取 UICollectionView 的项目(或索引)

由于索引超出范围,uitableviewcell 滚动中的 uicollectionview 将崩溃

启用collectionview分页时将collection view滚动到索引

滚动旋转时 UICollectionView 崩溃(索引路径处补充项目的布局属性已更改而未失效..)

UICollectionView滚动更改页面控制器索引swift3?