IOS:UIScrollView内的UICollectionView索引没有递增

时间:2014-11-18 11:12:23

标签: ios iphone scrollview collectionview

你好stackoverflow的人,

目前正在使用我有一个类似于此用户配置文件的应用

http://i.imgur.com/H1N0ouX.jpg(抱歉,我没有足够的声誉来发布图片)

标题视图是用户的图片。 标签视图是2个标签,一个带有集合视图,另一个带有桌面视图。

所有这些视图都嵌套在scrollView

我的问题是,当我滚动该视图(集合视图高度根据元素数量设置programmaticaly)时,集合视图的索引不会增加。只有6个第一项被加载到集合视图的可见单元索引中。

我需要从collectionview的项目到项目的详细视图。

如何使用scrollView委托知道我的集合视图所在的位置。

我看过那些线程: iOS 7 Collection View inside Scroll View How to implement non-scrollable UICollectionView inside UIScrollView?

但没有人给我我正在寻找的答案。

我还尝试查看scrollViewDidEndDecelerating并根据滚动视图偏移量设置我的集合视图滚动偏移量,但我无法使其正常工作。

有任何建议吗?

由于

编辑:

您好,感谢您的回答,

要回答你的问题,我可以滚动我的集合视图,因为它在滚动视图中,我在viewdidload期间设置了我的集合视图高度(基于元素数量)

我的问题是,我可以点击前6个项目,并显示详细信息(通过segue)但之后,由于我的集合视图未刷新索引,因此无法识别选择。我可以一直滚动到我的集合视图的底部(我通过scrollView滚动)。

我的collectionView启用了用户交互检查,正如我所说,我可以选择前6项,然后选择无法识别。

我理解UICollectionViewFlowLayout问题,但是我在哪里写这行?在viewDidLoad中?或者在CollectionView的委托函数中?

如果您需要更多信息,我可以复制一些代码或在故事板中显示视图的布局

提前致谢。

编辑2:

图片,故事板:我的观点布局

http://i.gyazo.com/c491786507db2effc702d910020515a2.png

代码,这里是collectionView

的数据源函数

http://gyazo.com/3730caeb2b2a40fef9efec559171744f

委托集合视图的func

http://i.gyazo.com/81fc9443b4367ecbd304e608ab0cc864.png

EDIT3:

好的,基本上这就是我想要重现的东西,

选项卡视图中间带有带有集合视图的多个选项卡,所有这些都可以滚动。 我无法理解的是,如果我将topView设置为CollectionView的标题,我就不能像标题一样切换标签。

ViewController with TalbeView and CollectionView tabs like Google+ in IOS

2 个答案:

答案 0 :(得分:0)

嗨首先,我需要有关您的问题的更多详细信息,但我假设您希望您的UICollectionView可滚动且实际上不滚动。

您可以查看以下几点: -

  1. 应启用集合视图的UserEnableInteraction。

  2. 还要检查你为UICollectionViewFlowLayout提供的值是什么,因为只考虑你是否要显示总共5个元素,你的UICollectionViewFlowLayout大小就像它可以显示可见单元格索引中的所有五个项目那么它不会滚动所以你需要增加UICollectionViewFlowLayout的大小以使其滚动。 e.g

  3. UICollectionViewFlowLayout * flowLayout = [[UICollectionViewFlowLayout alloc] init];

    [flowLayout setItemSize:CGSizeMake(148, 148)];
    
    1. 如果您愿意,可以从UIScrollViewDelegate方法获得帮助,如

      - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
      {
      if (!decelerate)
      {
          // do your job
      }
      }
      

答案 1 :(得分:-2)

.h

中设置委托和数据源
#import <UIKit/UIKit.h>
 @interface ViewController : UIViewController<UITableViewDataSource , UITableViewDelegate ,         
  UIScrollViewDelegate , UICollectionViewDataSource , UICollectionViewDelegateFlowLayout>

你可以做到.mViewDidLoad: -

    UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];
    UICollectionView *collectionView =[[UICollectionView alloc] initWithFrame:self.view.frame collectionViewLayout:layout ];
    collectionView.frame = CGRectMake(5, 61, 365, 678);
    collectionView.delegate = self;
    collectionView.dataSource = self;
    [collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cellIdentifier"];
    [self.view addSubview:collectionView];

然后调用她的代理方法: -

 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return [arrImages count];
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewCell *cell=[collectionView dequeueReusableCellWithReuseIdentifier:@"cellIdentifier" forIndexPath:indexPath];
    [self createCell:cell forTableview:collectionView];

    [self fillCell:cell cellForRowAtIndex:indexPath];
     return cell;
}

//- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
//{
//    return CGSizeMake(50, 50);
//}