Ios collectionView未调用cellForItemAtIndexPath

Ios collectionView未调用cellForItemAtIndexPath,ios,objective-c,uicollectionview,Ios,Objective C,Uicollectionview,我在故事板中拍摄了UICollectionView。我还设置了datasource和delegate。 下面的方法被调用 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{ return 4; } 但是未调用-(UICollectionViewCell*)collectionView:(UICollectionView*)colle

我在故事板中拍摄了
UICollectionView
。我还设置了
datasource
delegate
。 下面的方法被调用

 - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
 return 4;
}
但是未调用
-(UICollectionViewCell*)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath*)indexPath

附加
UICollectionView
属性的屏幕截图。你知道这个问题吗

现在,如果隐藏导航栏,则collectionView可见。在have set top constraint
Myheader Collection View.top=top Layout Guide.bottom+64中,认为它位于控制器的顶部。在完成方法-
-(UICollectionViewCell*)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath*)indexPath
后,我收到以下警告

警告: 能够同时满足约束。 可能下面列表中至少有一个约束是您不想要的。 试试这个: (1) 看看每一个约束,试着找出你不期望的; (2) 找到添加了不需要的约束的代码,然后修复它。 ( "", "", "", "" )

将尝试通过打破约束进行恢复

在UIViewAlertForUnsatifiableConstraints处创建一个符号断点,以便在调试器中捕获该断点。
中列出的UIView上UIConstraintBasedLayoutDebugging类别中的方法可能也会有所帮助。

我认为您没有正确设置流

因此,它不会转到
-(UICollectionViewCell*)collectionView:(UICollectionView*)collectionView cellForItemAtIndexPath:(NSIndexPath*)indexPath
方法。因此,设置断点并检查每个流布局方法

流布局方法的顺序调用

如果您设置了

 UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
    [flowLayout setScrollDirection:UICollectionViewScrollDirectionVertical];
    float ratio = self.aCollectionView.frame.size.width/3;
    [flowLayout setItemSize:CGSizeMake(ratio, ratio)];
    [flowLayout setMinimumInteritemSpacing:0];
    [flowLayout setMinimumLineSpacing:0]; 
第二,在你的例子中,这个方法也叫做

-(NSInteger)集合视图:(UICollectionView*)视图编号项节:(NSInteger)节

第三-您需要从这一行检查,//您是否正确设置了它

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    float width = collectionView.frame.size.width/3;//120
    float height = collectionView.frame.size.height/4;//120
    return CGSizeMake(width-17,height-14);
}
第四,这种方法称为

- (UIEdgeInsets)collectionView:
(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
    return UIEdgeInsetsMake(14.0, 14.0, 0.0, 14.0);
}
最后在这里调用
cellforitem
方法。所以,你们的这个方法不叫那个么,问题是在上面的方法中尝试设置断点,改变细胞大小和边缘昆虫等,然后尝试

第五,如果上面所有的设置都正确的话,下面的方法调用


-(UICollectionViewCell*)collectionView:(UICollectionView*)cv cellForItemAtIndexPath:(NSIndexPath*)indexPath
几年前,我的
UITableView
也遇到了类似的问题,解决方案是在情节提要中将“n”从我的控件拖到父视图

仅仅在我的Objective-C代码中设置值似乎是不够的

详情如下:


上面的一行解决了我的问题。

是否调用了
numberOfItemsInSection
?您指定了多少节
?我指定了1节。运行应用程序后您看到了什么?一个项目还是一个项目都没有?尝试增加collectionView的高度。如果不合适,它可能不会尝试显示项目(即使理论上contentSize和“visible”框架不同,也不应该是问题)。尝试在viewDidLoad上以编程方式设置委托和数据源
[myCollectionView setContentInset:UIEdgeInsetsMake(100, 0, 0, 0)];