IOS:UIScrollView 内的 UICollectionView 索引未增加

Posted

技术标签:

【中文标题】IOS:UIScrollView 内的 UICollectionView 索引未增加【英文标题】:IOS : UICollectionView inside UIScrollView index not incremented 【发布时间】:2014-11-18 11:12:23 【问题描述】:

大家好,***,

目前正在开发一个应用程序,我的用户个人资料看起来像这样

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

标题视图是用户的图片。 Tab View 是 2 个选项卡,一个带有 collectionview,另一个带有 tableview。

所有这些视图都嵌套在一个滚动视图中

我的问题是,当我滚动该视图时(集合视图高度以编程方式设置取决于元素的数量),集合视图的索引不会增加。只有前 6 个项目被加载到集合视图的可见单元格索引中。

我需要从collectionview 的item segue 到item 的detail view。

我如何使用 scrollView 委托来知道我的集合视图在哪里。

我查看了这些线程: ios 7 Collection View inside Scroll View How to implement non-scrollable UICollectionView inside UIScrollView?

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

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

有什么建议吗?

谢谢

编辑:

您好,感谢您的回答,

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

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

我的collectionView已经勾选了用户交互,就像我说的,我可以选择前6个项目,然后选择不被识别。

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

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

提前致谢。

编辑 2:

图像,故事板:我的视图布局

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

代码,这里是collectionView的数据源函数

http://gyazo.com/3730caeb2b2a40fef9efec559171744f

集合视图的委托函数

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

EDIT3:

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

中间的标签视图带有多个带有集合视图的标签,所有这些都是可滚动的。 我无法理解的是,如果我将我的 topView 设置为 CollectionView 的标题,我不能像我想要的那样切换标签,因为它在标题内。

ViewController with TalbeView and CollectionView tabs like Google+ in IOS

【问题讨论】:

请清除您想问的问题 我的问题很简单:我无法选择viewDidLoad后不可见的任何项目,我的collectionview嵌套在一个滚动视图中,我用滚动视图滚动。我的集合视图索引路径未更新,我无法选择前 6 个项目之后的任何项目 你能更新一些关于你的问题的图片或代码吗? 你好,我添加了一些截图(故事板、委托和数据源) 我在下面发布我的答案,你知道吗? 【参考方案1】:

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

那么您能否检查以下几点:-

    应启用集合视图的 UserEnableInteraction。

    还要检查您为 UICollectionViewFlowLayout 提供的值是多少,因为只需考虑您是否有总共 5 个元素要显示并且您的 UICollectionViewFlowLayout 大小是否可以在可见单元格索引中显示所有五个项目然后它不会滚动因此您需要增加 UICollectionViewFlowLayout 的大小以使其滚动。 例如

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

[flowLayout setItemSize:CGSizeMake(148, 148)];

    如果你愿意,你可以从 UIScrollViewDelegate 方法中获得帮助,比如

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

【讨论】:

【参考方案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);
//

【讨论】:

嗨,这不能回答我的问题。我知道如何设置集合视图,并且我已经用 items 加载了它,这是一个屏幕,解释了我能做什么和不能做什么i.imgur.com/pQkMUiY.jpg 对不起,伙计,我不知道这种类型的问题,如果我找到解决方案,我会发布给你。 谢谢,如果您查看我的 EDIT3,我发现了一个与我类似的问题,他们说将集合视图放在 uitableviewcell 中,对此不太确定

以上是关于IOS:UIScrollView 内的 UICollectionView 索引未增加的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7 自动布局 - UIScrollView 内的 UIImageView

iOS - UICollectionViewCell 内的 UIScrollView - 内部视图的动画不正确(延迟)

故事板ios中UIScrollView内的滚动表视图

IOS:UIScrollView 内的 UICollectionView 索引未增加

UIScrollView 内的 UIView 未在 3,5 英寸屏幕 iOS 上调整大小

UITableViewCell内的iOS UICollectionView